阿里云視頻加密(又稱阿里云私有加密)可針對直播流進行加密,本文介紹優勢、整體架構和使用方法。
僅支持輸出HLS格式和FLV格式。
只能使用阿里云播放器。
H5端支持情況參見H5瀏覽器適配說明中阿里云私有加密視頻播放功能項。
背景
防盜鏈URL不能防止用戶通過一次付費行為拿到付費直播合法的防盜鏈URL,進而實現二次分發。因此,防盜鏈方案對于直播的版權保護是遠遠不夠的。
優勢介紹
阿里云視頻加密是對視頻數據加密,即使下載到本地,視頻本身也是被加密的,無法惡意二次分發。視頻加密可有效防止視頻泄露和盜鏈問題,廣泛用于在線教育、財經金融、行業培訓、獨播劇等在線版權視頻領域。
采用阿里云私有加密算法,安全級別高,能夠便捷、高效、安全地保護視頻資源。
每個媒體文件擁有獨立的加密鑰匙,能有效避免采用單一密鑰時,一個密鑰的泄露引起大范圍的安全問題。
視頻直播提供完善的權限管理機制“子賬號+播放憑證”。
視頻直播提供信封加密機制”密文Key+明文Key”,明文Key不存儲,所有過程只在內存中。
視頻直播提供安全的播放內核SDK。
整體架構
阿里云視頻加密方案包含兩部分:加密轉碼+解密播放。
加密轉碼:流程1~3。
主播推流到直播中心后,直播服務負責通過密鑰管理服務KMS生成明文Key和密文Key。通過直播轉碼服務,使用明文密鑰對音視頻進行對稱加密,并將密文Key存入視頻封裝。
解密播放:流程4~11。
播放終端如需播放此直播流,需向應用服務器AppServer發起播放請求,獲取播流URL。使用播流URL向直播服務請求視頻流。直播服務將經過轉碼的加密視頻和密文Key傳輸到播放器SDK。
播放終端用密文Key向直播服務獲取二次加密后的明文Key,直播服務再通過密文Key向密鑰管理服務KMS獲取明文Key。播放終端將解密得到的明文Key傳給播放器SDK,播放器SDK解密視頻進行播放。
使用方式
阿里云視頻加密是通過轉碼模板進行配置,可支持控制臺和API兩種配置方式。
使用阿里云視頻加密需要配置KMS密鑰ID,如果沒有密鑰,請先前往KMS服務創建一個密鑰,需注意創建密鑰時KMS密鑰的區域需要和域名的直播中心保持一致。具體操作,請參見創建密鑰。
方式一:通過視頻直播控制臺。具體操作,請參見通用轉碼、自定義轉碼。
方式二: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服務訪問權限,更多信息請參見直播加密服務關聯角色。