視頻添加水印,即指在視頻的編解碼過程當中將圖片、文字等信息壓制到視頻流中合併輸出一個帶圖文水印的新的視頻文件。一般在視頻上添加企業、品牌Logo、電視臺臺標、用戶ID或暱稱等標誌性信息,可用於宣示對視頻的版權歸屬或品牌宣傳。html
視頻點播支持三種水印類型:靜態圖片(png格式)、動態圖片(gif、apng、mov視頻)和文字水印。安全
說明:更多視頻水印信息請參考 視頻水印。ide
說明:工具
png、gif水印能夠經過視頻點播控制檯-->水印管理添加,這裏只介紹如何經過API添加水印信息。學習
說明:測試
文字水印沒有文件這類資源數據,所以無需此步操做。字體
調用 CreateUploadAttachedMedia 接口獲取文件上傳路徑以及上傳臨時受權。ui
說明:
須要將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示例。
獲取到上傳路徑與臨時受權,則能夠經過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示例。
水印文件上傳完成後,調用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示例。
調用水印添加接口完成後,水印信息已經建立完成。
要將建立的水印信息關聯到視頻轉碼處理中,可調用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示例。
建立完轉碼配置後,用戶能夠在上傳視頻時指定建立好的轉碼模板配置ID或者將建立好的轉碼配置設置成默認,這樣轉碼流程會自動處理並添加水印。
說明:更多代碼示例詳細請參考上傳SDK 示例。
一站式開發者服務,海量學習資源0元起!
阿里熱門開源項目、機器學習乾貨、開發者課程/工具、小微項目、移動研發等海量資源;更有開發者福利Kindle、技術圖書幸運抽獎,100%中--》www.aliyun.com/acts/produc…