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