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

簡介

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

水印類型

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

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

水印的使用

說明:

1.上傳水印文件

說明:
  • 文字水印沒有文件這類資源數據,所以無需此步操做。

1.1 獲取文件上傳路徑與憑證

調用 CreateUploadAttachedMedia 接口獲取文件上傳路徑以及上傳臨時受權。bash

說明:
  • 須要將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(文件在點播存儲的文件名稱)。ide

文件上傳受權信息有: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。字體

接口請求處理代碼示例:

添加轉碼配置ui

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.水印效果

單水印

多水印

文字水印

圖文水印


一站式開發者服務,海量學習資源0元起!

阿里熱門開源項目、機器學習乾貨、開發者課程/工具、小微項目、移動研發等海量資源;更有開發者福利Kindle、技術圖書幸運抽獎,100%中--》【阿里雲】開年Hi購季,開發者會場


原文連接

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索