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

許此一生發表於2019-03-18

簡介

視訊新增水印,即指在視訊的編解碼過程中將圖片、文字等資訊壓制到視訊流中合併輸出一個帶圖文水印的新的視訊檔案。通常在視訊上新增企業、品牌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%中--》www.aliyun.com/acts/produc…


相關文章