简介
视频添加水印,即指在视频的编解码过程中将图片、文字等信息压制到视频流中合并输出一个带图文水印的新的视频文件。通常在视频上添加企业、品牌Logo、电视台台标、用户ID或昵称等标志性信息,可用于宣示对视频的版权归属或品牌宣传。
水印类型
视频点播支持三种水印类型:静态图片(png格式)、动态图片(gif、apng、mov视频)和文字水印。
说明:更多视频水印信息请参考 视频水印。
水印的使用
说明:
- png、gif水印可以通过视频点播控制台-->水印管理添加,这里只介绍如何通过API添加水印信息。
1.上传水印文件
说明:
- 文字水印没有文件这类资源数据,因此无需此步操作。
1.1 获取文件上传路径与凭证
调用 CreateUploadAttachedMedia 接口获取文件上传路径以及上传临时授权。
说明:
- 需要将BusinessType设置为watermark、 MediaExt设置文件的真实格式,例如:png。
接口请求处理代码示例:
CreateUploadAttachedMediaRequest request = new CreateUploadAttachedMediaRequest();
//上传水印文件设置watermark即可
request.setBusinessType("watermark");
//水印文件在本地的文件名称
request.setFileName("watermark.png");
//水印文件的扩展名(png、gif、apng、mov)
request.setMediaExt("png");
//水印文件对应的标题
request.setTitle("水印文件");
//水印文件存储的源站
request.setStorageLocation("outin-40564284ef0511e8b2d300163e1403e7.oss-cn-shanghai.aliyuncs.com");
CreateUploadAttachedMediaResponse response = client.getAcsResponse(request);
接口将会返回文件上传的路径(UploadAddress)和临时授权(UploadAuth)信息,将UploadAddress和UploadAuth进行Base64Decode(解码后是JSONObject数据)。
文件存储路径信息有:Bucket(OSS存储bucket)、EndPoint(存储区域地址)、FileName(文件在点播存储的文件名称)。
文件上传授权信息有:AccessKeyId、AccessKeySecret、Expiration(授权的过期时间)、SecurityToken(安全令牌)。
说明:更多上传路径和凭证信息可参考 上传地址和凭证
返回参数处理代码示例:
// FileURL 需要用于水印添加接口作为参数传入
String fileUrl = response.getFileURL();
//获取文件的上传地址
String uploadAddress = response.getUploadAddress();
//获取文件上传时的临时授权
String uploadAuth = response.getUploadAuth();
//解析文件上传地址内容(需要先base64解码再转换成JSON)
JSONObject address = JSON.parseObject(base64Decode(uploadAddress));
//解析文件上传时的临时授权(需要先base64解码再转换成JSON)
JSONObject auth = JSON.parseObject(base64Decode(uploadAuth));
//OSS上传Endpoint
String endpoint = (String) address.get("Endpoint");
//OSS存储文件的bucket
String bucket = (String) address.get("Bucket");
//文件存储到OSS的名称
String fileName = (String) address.get("FileName");
//OSS上传的临时授权AK
String accessKeyId = (String) auth.get("AccessKeyId");
String accessKeySecrect = (String) auth.get("AccessKeySecret");
//OSS上传token
String securityToken = (String) auth.get("SecurityToken");
说明:更多接口调用代码示例请参考 CreateUploadAttachedMedia SDK示例。
1.2 上传水印文件
获取到上传路径与临时授权,则可以通过OSS上传水印文件。
上传水印文件部分代码示例:
File file = new File("/tmp/test.watermark.png");
//上传水印文件
OSSClient ossClient = new OSSClient(uploadEndpoint, ossAccessKeyId, ossAccessKeySecrect, ossToken);
//将水印文件上传到OSS
ossClient.putObject(bucket, fileName, file);
//上传完成后务必关闭oss client
ossClient.shutdown();
说明:更多OSS 相关代码示例请参考 OSS SDK示例。
2.添加水印信息
水印文件上传完成后,调用AddWatermark 接口 添加文字水印或图片水印信息。
接口请求处理代码示例:
AddWatermarkRequest request = new AddWatermarkRequest();
//水印名称
request.setName("test");
//调用获取文件上传路径和凭证接口返回的FileURL
String fileUrl = "http://out-ddddd.cn-shanghai.aliyuncs.com/watermark/ddasaaasa.png";
//图片水印必传图片文件的oss文件地址,水印文件必须和视频在同一个区域,例如:华东2视频,水印文件必须存放在华东2
request.setFileUrl(fileUrl);
//文字水印:Text; 图片水印:Image
request.setType("Image");
//水印配置信息(构建水印配置信息方法,详细的构建逻辑请参考接口SDK示例。)
JSONObject watermarkConfig = buildWatermarkConfig();
request.setWatermarkConfig(watermarkConfig.toJSONString());
AddWatermarkResponse response = client.getAcsResponse(request);
说明:更多详细代码示例请参考 AddWatermark SDK示例。
调用水印添加接口完成后,水印信息已经创建完成。
3.添加转码配置
要将创建的水印信息关联到视频转码处理中,可调用AddTranscodeTemplateGroup 接口添加转码配置并指定需要使用到的水印信息ID。
接口请求处理代码示例:
添加转码配置
AddTranscodeTemplateGroupRequest request = new AddTranscodeTemplateGroupRequest();
request.setName("测试水印水印");
JSONArray transcodeTemplateList = buildTranscodeTemplateList();
request.setTranscodeTemplateList(transcodeTemplateList.toJSONString());
AddTranscodeTemplateGroupResponse response = client.getAcsResponse(request)
构建转码配置列表
public static JSONArray buildTranscodeTemplateList() {
JSONArray transcodeTemplateList = new JSONArray();
JSONObject transcodeTemplate = new JSONObject();
//清晰度
transcodeTemplate.put("Definition", "LD");
//模板名称
transcodeTemplate.put("TemplateName", "testtemplate");
//视频流转码配置
JSONObject video = new JSONObject();
video.put("Width", 640);
video.put("Bitrate", 400);
//video.put("Fps", 25);
video.put("Remove", false);
video.put("Codec", "H.264");
video.put("Gop", "250");
transcodeTemplate.put("Video", video);
//音频流转码配置
JSONObject audio = new JSONObject();
audio.put("Codec", "AAC");
audio.put("Bitrate", "64");
audio.put("Channels", "2");
audio.put("Samplerate", "32000");
transcodeTemplate.put("Audio", audio);
//封装容器
JSONObject container = new JSONObject();
container.put("Format", "m3u8");
transcodeTemplate.put("Container", container);
//条件转码配置
JSONObject transconfig = new JSONObject();
transconfig.put("IsCheckReso", false);
transconfig.put("IsCheckResoFail", false);
transconfig.put("IsCheckVideoBitrate", false);
transconfig.put("IsCheckVideoBitrateFail", false);
transconfig.put("IsCheckAudioBitrate", false);
transconfig.put("IsCheckAudioBitrateFail", false);
transcodeTemplate.put("TransConfig", transconfig);
//需要使用的水印ID(多水印关联),最多支持4个水印
JSONArray watermarkIdList = new JSONArray();
watermarkIdList.add("23ebea5c67a450d9b595a0156198821f");
//USER_DEFAULT_WATERMARK 代表默认水印ID
watermarkIdList.add("6aa9cf7ff1497799deece4578a55f5e4");
transcodeTemplate.put("WatermarkIds", watermarkIdList);
transcodeTemplateList.add(transcodeTemplate);
return transcodeTemplateList;
}
说明:更多详细代码示例请参考 AddTranscodeTemplateGroup SDK示例。
4.上传视频
创建完转码配置后,用户可以在上传视频时指定创建好的转码模板配置ID或者将创建好的转码配置设置成默认,这样转码流程会自动处理并添加水印。
说明:更多代码示例详细请参考上传SDK 示例。