视频水印,指在视频上添加相关标志性信息(如企业Logo、电视台台标、用户昵称、用户ID等),以突出品牌、维护版权、增加产品的识别度。本文提供了Java SDK视频水印相关的API调用示例,包含添加图片或文字水印、修改水印、删除水印、查询水印等。
接口调用说明
本文提供的接口调用示例均通过AccessKey初始化客户端实例。
接口的参数解释和返回字段的详细说明请访问阿里云OpenAPI门户,在各接口右侧的文档页签查看。
本文仅提供部分复杂接口的代码示例,其余接口的SDK代码示例,可以通过阿里云OpenAPI门户获取。访问阿里云OpenAPI门户,在接口的左侧参数配置页签,填写需要的参数信息并发起调用后,在右侧的SDK示例页签,选择SDK版本,选择目标语言,查看并下载示例代码。
本文均以V1.0版本的SDK为例进行接口调用,如需获取V2.0版本的SDK示例,请在通过阿里云OpenAPI门户获取SDK示例时,指定到对应的SDK版本。
初始化客户端
使用前请先初始化客户端,请参见初始化。
添加水印
调用AddWatermark接口,完成添加水印功能。
阿里云OpenAPI门户地址:AddWatermark。
获取文件上传地址和凭证详细参数请参见CreateUploadAttachedMedia。
水印文件OSS上传详细参数请参见OSS文件上传。
调用示例如下:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.AddWatermarkRequest;
import com.aliyuncs.vod.model.v20170321.AddWatermarkResponse;
/**
* 读取AccessKey信息
*/
public static DefaultAcsClient initVodClient() throws ClientException {
// 点播服务接入地域
String regionId = "cn-shanghai";
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* 添加水印配置信息函数
*/
public static AddWatermarkResponse addWatermark(DefaultAcsClient client) throws Exception {
AddWatermarkRequest request = new AddWatermarkRequest();
//水印名称
request.setName("addwatermark");
//获取水印文件在oss的URL,例如:http://example.oss-cn-shanghai.aliyuncs.com/watermark/test-****.png
String fileUrl = "<your watermarkFile URL>";
//图片水印必传图片文件的oss文件地址,水印文件必须和视频在同一个区域,例如:华东2视频,水印文件必须存放在华东2
request.setFileUrl(fileUrl);
//水印配置数据
JSONObject watermarkConfig = null;
//图片水印的位置配置数据
watermarkConfig = buildImageWatermarkConfig();
//文字水印的位置配置数据
//watermarkConfig = buildTextWatermarkConfig();
request.setWatermarkConfig(watermarkConfig.toJSONString());
//文字水印:Text; 图片水印:Image
request.setType("Image");
return client.getAcsResponse(request);
}
/**
* 以下为调用示例
* @param args
* @throws ClientException
*/
public static void main(String[] args) throws ClientException {
DefaultAcsClient client = initVodClient();
AddWatermarkResponse response = new AddWatermarkResponse();
try {
//添加水印信息
response = addWatermark(client);
//水印ID
System.out.println("WatermarkId = " + response.getWatermarkInfo().getWatermarkId());
//水印的位置、效果配置数据
System.out.println("WatermarkConfig = " + response.getWatermarkInfo().getWatermarkConfig());
//水印文件的FileUrl(文字水印该字段值为空)
System.out.println("FileUrl = " + response.getWatermarkInfo().getFileUrl());
} catch (Exception e) {
System.out.println("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.println("RequestId = " + response.getRequestId());
}
/**
* 构建图片水印的配置数据,根据具体设置需求修改对应的参数值
* @return
*/
public static JSONObject buildImageWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
//水印的横向偏移距离
watermarkConfig.put("Dx", "8");
//水印的纵向偏移距离
watermarkConfig.put("Dy", "8");
//水印显示的宽
watermarkConfig.put("Width", "55");
//水印显示的高
watermarkConfig.put("Height", "55");
//水印显示的相对位置(左上、右上、左下、右下)
watermarkConfig.put("ReferPos", "BottomRight");
//水印显示的时间线(开始显示和结束显示时间)
JSONObject timeline = new JSONObject();
//水印开始显示时间
timeline.put("Start", "2");
//水印结束显示时间
timeline.put("Duration", "ToEND");
watermarkConfig.put("Timeline", timeline);
return watermarkConfig;
}
/**
* 构建文字水印的配置数据,根据具体设置需求修改对应的参数值
* @return
*/
public static JSONObject buildTextWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
//文字水印显示的内容
watermarkConfig.put("Content", "testwatermark");
//文字水印的字体名称
watermarkConfig.put("FontName", "SimSun");
//文字水印的字体大小
watermarkConfig.put("FontSize", 25);
//文字水印的颜色(也可为RGB颜色取值,例如:#000000)
watermarkConfig.put("FontColor", "Black");
//文字水印的透明度
watermarkConfig.put("FontAlpha", "0.2");
//文字水印的字体描边颜色(也可为RGB颜色取值,例如:#ffffff)
watermarkConfig.put("BorderColor", "White");
//文字水印的描边宽度
watermarkConfig.put("BorderWidth", 1);
//文字水印距离视频画面上边的偏移距离
watermarkConfig.put("Top", 20);
//文字水印距离视频画面左边的偏移距离
watermarkConfig.put("Left", 15);
return watermarkConfig;
}
修改水印
调用UpdateWatermark接口,完成修改水印功能。
阿里云OpenAPI门户地址:UpdateWatermark。
调用示例如下:
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
import com.aliyuncs.vod.model.v20170321.UpdateWatermarkRequest;
import com.aliyuncs.vod.model.v20170321.UpdateWatermarkResponse;
/**
* 读取AccessKey信息
*/
public static DefaultAcsClient initVodClient() throws ClientException {
// 点播服务接入地域
String regionId = "cn-shanghai";
// 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。
// 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。
// 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* 修改水印配置信息函数
* 注意:不支持图片文件地址的修改,如果更换请创建新的水印信息
*/
public static UpdateWatermarkResponse updateWatermark(DefaultAcsClient client) throws Exception {
UpdateWatermarkRequest request = new UpdateWatermarkRequest();
request.setName("updatewatermark");
//需要更新配置信息的水印ID
request.setWatermarkId("421ddddd4f6e734a526fd2****");
//水印配置数据
JSONObject watermarkConfig = null;
//图片水印的位置配置数据
//watermarkConfig = buildImageWatermarkConfig();
//文字水印的位置配置数据
watermarkConfig = buildTextWatermarkConfig();
request.setWatermarkConfig(watermarkConfig.toJSONString());
return client.getAcsResponse(request);
}
/**
* 以下为调用示例
*/
public static void main(String[] args) {
DefaultAcsClient client = initVodClient();
UpdateWatermarkResponse response = new UpdateWatermarkResponse();
try {
response = updateWatermark(client);
//水印ID
System.out.println("WatermarkId = " + response.getWatermarkInfo().getWatermarkId());
//水印的位置、效果配置数据
System.out.println("WatermarkConfig = " + response.getWatermarkInfo().getWatermarkConfig());
//水印文件的FileUrl(文字水印该字段值为空)
System.out.println("FileUrl = " + response.getWatermarkInfo().getFileUrl());
} catch (Exception e) {
System.out.println("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.println("RequestId = " + response.getRequestId());
}
/**
* 构建图片水印的配置数据,根据具体设置需求修改对应的参数值
* @return
*/
public static JSONObject buildImageWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
//水印的横向偏移距离
watermarkConfig.put("Dx", "10");
//水印的纵向偏移距离
watermarkConfig.put("Dy", "10");
//水印显示的宽
watermarkConfig.put("Width", "66");
//水印显示的高
watermarkConfig.put("Height", "66");
//水印显示的相对位置(左上、右上、左下、右下)
watermarkConfig.put("ReferPos", "BottomLeft");
//水印显示的时间线(开始显示和结束显示时间)
JSONObject timeline = new JSONObject();
//水印开始显示时间
timeline.put("Start", "2");
//水印结束显示时间
timeline.put("Duration", "ToEND");
watermarkConfig.put("Timeline", timeline);
return watermarkConfig;
}
/**
* 构建文字水印的配置数据,根据具体设置需求修改对应的参数值
* @return
*/
public static JSONObject buildTextWatermarkConfig() {
JSONObject watermarkConfig = new JSONObject();
//文字水印显示的内容
watermarkConfig.put("Content", "testwatermark");
//文字水印的字体名称
watermarkConfig.put("FontName", "SimSun");
//文字水印的字体大小
watermarkConfig.put("FontSize", 40);
//文字水印的颜色(也可为RGB颜色取值,例如:#000000)
watermarkConfig.put("FontColor", "Black");
//文字水印的透明度
watermarkConfig.put("FontAlpha", "0.2");
//文字水印的字体描边颜色(也可为RGB颜色取值,例如:#ffffff)
watermarkConfig.put("BorderColor", "White");
//文字水印的描边宽度
watermarkConfig.put("BorderWidth", 2);
//文字水印距离视频画面上边的偏移距离
watermarkConfig.put("Top", 20);
//文字水印距离视频画面左边的偏移距离
watermarkConfig.put("Left", 15);
return watermarkConfig;
}
删除水印
调用DeleteWatermark接口,完成删除水印功能。
阿里云OpenAPI门户地址:DeleteWatermark。
查询水印列表
调用ListWatermark接口,完成查询水印列表功能。
阿里云OpenAPI门户地址:ListWatermark。
查询单个水印
调用GetWatermark接口,完成查询单个水印功能。
阿里云OpenAPI门户地址:GetWatermark。
设置默认水印
调用SetDefaultWatermark接口,完成设置默认水印功能。
阿里云OpenAPI门户地址:SetDefaultWatermark。
相关文档
视频图文水印:介绍视频点播的视频图文水印功能更完整更详细的信息,包括工作原理、应用场景、应用示例等。