1. 程式人生 > >視頻點播開發者實戰:視頻水印的基本使用

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

pre csr int 條件 mat resp 流程 p s lena

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

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

圖片水印支持水印位置、尺寸等效果設置,
文字水印支持字體、顏色、字號、透明度、字體描邊等效果設置。
說明:更多視頻水印信息請參考 視頻水印。

水印的使用
說明:

png、gif水印可以通過視頻點播控制臺-->水印管理添加,這裏只介紹如何通過API添加水印信息。

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.水印效果
單水印
技術分享圖片

多水印
技術分享圖片

文字水印
技術分享圖片

圖文水印
技術分享圖片

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