阿里雲視頻加密(又稱阿里雲私人加密)可針對直播流進行加密,本文介紹優勢、整體架構和使用方法。
僅支援輸出HLS格式和FLV格式。
只能使用阿里雲播放器。
H5端支援情況參見H5瀏覽器適配說明中阿里雲私人加密視頻播放功能項。
背景
防盜鏈URL不能防止使用者通過一次付費行為拿到付費直播合法的防盜鏈URL,進而實現二次分發。因此,防盜鏈方案對於直播的著作權保護是遠遠不夠的。
優勢介紹
阿里雲視頻加密是對視頻資料加密,即使下載到本地,視頻本身也是被加密的,無法惡意二次分發。視頻加密可有效防止視頻泄露和盜鏈問題,廣泛用於線上教育、財經金融、行業培訓、獨播劇等線上著作權視頻領域。
採用阿里雲私人密碼編譯演算法,安全層級高,能夠便捷、高效、安全地保護視頻資源。
每個媒體檔案擁有獨立的加密鑰匙,能有效避免採用單一密鑰時,一個密鑰的泄露引起大範圍的安全問題。
ApsaraVideo for Live提供完善的許可權管理機制“子帳號+播放憑證”。
ApsaraVideo for Live提供信封加密機制”密文Key+明文Key”,明文Key不儲存,所有過程只在記憶體中。
ApsaraVideo for Live提供安全的播放核心SDK。
整體架構
阿里雲視頻加密方案包含兩部分:加密轉碼+解密播放。
加密轉碼:流程1~3。
主播推流到直播中心後,直播服務負責通過Key Management Service產生明文Key和密文Key。通過直播轉碼服務,使用清除金鑰對音視頻進行對稱加密,並將密文Key存入視頻封裝。
解密播放:流程4~11。
播放終端如需播放此直播流,需嚮應用伺服器AppServer發起播放請求,擷取播流URL。使用播流URL向直播服務要求視頻流。直播服務將經過轉碼的加密視頻和密文Key傳輸到播放器SDK。
播放終端用密文Key向直播服務擷取二次加密後的明文Key,直播服務再通過密文Key向Key Management Service擷取明文Key。播放終端將解密得到的明文Key傳給播放器SDK,播放器SDK解密視頻進行播放。
使用方式
阿里雲視頻加密是通過轉碼模板進行配置,可支援控制台和API兩種配置方式。
使用阿里雲視頻加密需要配置KMS密鑰ID,如果沒有密鑰,請先前往KMS服務建立一個密鑰,需注意建立密鑰時KMS密鑰的地區需要和網域名稱的直播中心保持一致。具體操作,請參見建立密鑰。
方式一:通過ApsaraVideo for Live控制台。具體操作,請參見通用轉碼、自訂轉碼。
方式二:API調用。
配置視頻加密轉碼模板,可調用AddLiveStreamTranscode添加通用轉碼配置資訊或調用AddCustomLiveStreamTranscode添加自訂轉碼配置資訊,設定加密配置參數
EncryptParameters
,其中EncryptType
加密類型取值aliyun
。Java SDK添加通用轉碼配置程式碼範例如下:
//需要<>內容替換成實際使用的值 DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"); IAcsClient client = new DefaultAcsClient(profile); AddLiveStreamTranscodeRequest addLiveStreamTranscodeRequest = new AddLiveStreamTranscodeRequest(); addLiveStreamTranscodeRequest.setDomain("<DomainName>"); addLiveStreamTranscodeRequest.setApp("<AppName>"); //轉碼模板 addLiveStreamTranscodeRequest.setTemplate("<Template>"); //加密配置,EncryptType:固定值aliyun,KmsKeyID:KMS主要金鑰ID,KmsKeyExpireInterval:換Key周期,取值範圍:60~3600,單位:秒 addLiveStreamTranscodeRequest.setEncryptParameters("{\"EncryptType\": \"aliyun\", \"KmsKeyID\":\"<KmsKeyID>\",\"KmsKeyExpireInterval\":\"<60>\"}"); // //其他業務代碼 // try { AddLiveStreamTranscodeResponse addLiveStreamTranscodeResponse = client.getAcsResponse(addLiveStreamTranscodeRequest); System.out.println(new Gson().toJson(addLiveStreamTranscodeResponse)); // todo something. } catch (ServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); }
說明如果更改轉碼配置,需要進行重新推流後配置才可生效。
使用JAVA SDK,具體請參見Java SDK使用說明。
其他相關API。
API名稱
說明
調用UpdateLiveStreamTranscode更新通用轉碼配置資訊。
調用UpdateCustomLiveStreamTranscode更新自訂轉碼配置資訊。
調用DescribeLiveStreamTranscodeInfo查詢轉碼配置資訊。
調用DeleteLiveStreamTranscode刪除轉碼配置資訊。
相關文檔
使用視頻加密,會自動建立AliyunServiceRoleForLiveKes角色擷取KMS服務存取權限,更多資訊請參見直播Data Encryption Service關聯角色。