Watermark水印
更新时间:2022-09-22
数字水印是向数据多媒体(如图像、音频、视频信号等)中添加某些数字信息以达到文件真伪鉴别、版权保护等功能。嵌入的水印信息隐藏于宿主文件中,不影响原始文件的可观性和完整性。
用户可以将BOS中的一个Object创建为水印,获得对应的watermarkId。然后在转码任务中将此水印添加到目的多媒体文件。
创建水印
如果需要创建一个水印, 指定水印的位置, 并获得水印的唯一ID。其中bucket是水印文件所在bucket名称,key是水印文件在该bucket中的文件名。可以参考如下代码:
public void createWaterMark(MediaClient client, String bucket, String key) {
CreateWaterMarkResponse watermark = client.createWaterMark(bucket, key, "left", "top");
System.out.println("new watermarkId: " + watermark.getWatermarkId());
}
如果需要创建一个水印, 指定水印的位置、显示时间段、重复显示次数(动态水印)、自动缩放, 并获得水印的唯一ID,可以参考如下代码:
public void createWaterMark(MediaClient client, String bucket, String key,
String horizontalAlignment, String verticalAlignment,
int horizontalOffsetInPixel, int verticalOffsetInPixel,
Timeline timeline, Integer repeated, Boolean allowScaling) {
CreateWaterMarkResponse watermark = client.createWaterMark(bucket, key, horizontalAlignment,
verticalAlignment, timeline, repeated, allowScaling);
System.out.println("new watermarkId: " + watermark.getWatermarkId());
}
接口返回的是包含了watermarkId的一个对象。
创建水印的转码任务
如果需要把水印添加到目标多媒体文件中,可以创建一个带水印的转码Preset,然后使用这个Preset创建转码任务。 可以设置Preset.watermarkId或Preset.watermarks,这里以设置Preset.watermarkId为例。
public void createPreset(MediaClient client, String presetName, String description, String container,
Clip clip,Audio audio, Video video, Encryption encryption, String watermarkId) {
client.createPreset(presetName, description, container, clip, audio, video, encryption, watermarkId);
String jobId = client.createJob(pipelineName, sourceKey, targetKey, presetName).getJobId();
}
代码参考创建视频文件转码配置和[创建视频文件转码任务](MCT/服务端SDK/Java-SDK/Transcoding-Job转码任务.md#创建Transcoding Job)。
查询指定水印
如果需要查询已创建的水印,可以参考如下代码:
public void getWaterMark(MediaClient client, String watermarkId) {
GetWaterMarkResponse watermark = client.getWaterMark(watermarkId);
System.out.println("watermarkId: " + watermark.getWatermarkId());
System.out.println("createTime: " + watermark.getCreateTime());
System.out.println("bucket: " + watermark.getBucket());
System.out.println("key: " + watermark.getKey());
System.out.println("horizontalOffsetInPixel: " + watermark.getHorizontalOffsetInPixel());
System.out.println("verticalOffsetInPixel: " + watermark.getVerticalOffsetInPixel());
}
查询当前用户水印
如果需要查询出本用户所创建的全部水印,可以参考如下代码:
public void getWaterMark(MediaClient client) {
List<WaterMark> watermarks = client.listWaterMark().getWatermarks();
for (WaterMark watermark : watermarks) {
System.out.println("watermarkId = " + watermark.getWatermarkId());
System.out.println("bucket = " + watermark.getBucket());
System.out.println("key = " + watermark.getKey());
System.out.println("createTime = " + watermark.getCreateTime());
System.out.println("horizontalOffsetInPixel = " + watermark.getHorizontalOffsetInPixel());
System.out.println("VerticalOffsetInPixel = " + watermark.getVerticalOffsetInPixel());
System.out.println();
}
}
删除水印
如果需要删除某个已知watermarkId的水印,可以参考如下代码:
public void getWaterMark(MediaClient client, String watermarkId) {
client.deleteWaterMark(watermarkId);
}