視頻點播開發者實戰:視頻水印的基本使用

簡介

視頻添加水印,即指在視頻的編解碼過程中將圖片、文字等信息壓制到視頻流中合併輸出一個帶圖文水印的新的視頻文件。通常在視頻上添加企業、品牌Logo、電視臺臺標、用戶ID或暱稱等標誌性信息,可用於宣示對視頻的版權歸屬或品牌宣傳。

水印類型

視頻點播支持三種水印類型:靜態圖片(png格式)、動態圖片(gif、apng、mov視頻)和文字水印。

  • 圖片水印支持水印位置、尺寸等效果設置,

  • 文字水印支持字體顏色、字號、透明度、字體描邊等效果設置。

說明:更多視頻水印信息請參考 視頻水印

水印的使用

說明:

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 示例

5.水印效果

單水印

1

多水印

2

文字水印

3

圖文水印

4

阿里雲開年Hi購季,視頻直播、視頻點播、CDN全線折扣,錯過這次,再等一年!點擊瞭解活動詳情

image

image

一站式開發者服務,海量學習資源0元起!
阿里熱門開源項目、機器學習乾貨、開發者課程/工具、小微項目、移動研發等海量資源;更有開發者福利Kindle、技術圖書幸運抽獎,100%中--》https://www.aliyun.com/acts/product-section-2019/developer?utm_content=g_1000047140

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章