HLS標準加密使用AES_128進行內容加密,適配所有HLS播放器,需要配合Key Management Service和令牌服務使用,被廣泛應用於線上教育、獨播劇等對Alibaba Content Security Service性要求較高的領域。本文為您介紹如何對視頻進行HLS標準加密以及如何進行解密播放。
升級說明
ApsaraVideo for VOD於2022年08月升級了HLS標準Data Encryption Service,最佳化了加密流程和邏輯,但舊的加密流程仍然可用,建議您使用新的加密流程。若因業務需要,您仍需使用舊的加密流程,可參考HLS標準加密(舊)。
工作原理
ApsaraVideo for VOD採用信封資料加密的方式加密視頻。業務方調用阿里雲Key Management Service(KMS)產生資料密鑰(DK)和信封資料密鑰(EDK),然後利用資料密鑰(DK)加密視頻,並將加密後的檔案和信封資料密鑰(EDK)儲存。播放器終端通過解密服務擷取資料密鑰(DK)請求解密播放視頻。
如果您需要對解密地址進行安全驗證,可以通過開啟M3U8標準加密改寫(預設改寫的參數名為MtsHlsUriToken
)實現對HLS資料訪問過程的再次加密保護。M3U8標準加密改寫的開啟方式及技術原理請參見HLS(M3U8)標準加密改寫。
加密及解密流程
上傳及加密流程
解密播放流程
開啟M3U8標準加密改寫(推薦)
未開啟M3U8標準加密改寫
前提條件
已經開通了ApsaraVideo for VOD服務。開通步驟請參見開通ApsaraVideo for VOD。
已經授權ApsaraVideo for VOD訪問您Key Management Service的許可權,可以通過雲資源訪問授權頁面進行授權。
已在ApsaraVideo for VOD中配置加速網域名稱,具體步驟請參見添加加速網域名稱。
已安裝ApsaraVideo for VOD服務端SDK,具體步驟請參見服務端SDK。本文以Java語言為例進行說明。
加密視頻
建立Service Key。
Service Key是Key Management Service的一種加密主Key,接入標準加密的密鑰必須要使用該Service Key產生,若不建立Service Key,則後續調用GenerateKMSDataKey - 建立KMS資料密鑰介面產生密鑰時將會報錯。
登入ApsaraVideo for VOD控制台,選擇組態管理 > ApsaraVideo for Media Processing配置 > 標準加密。
單擊頁面左上方的服務地區標識,切換到需要建立Service Key的服務地區下。
說明建立的Service Key與視頻儲存的來源站點地區必須一致,例如:視頻儲存在華東2(上海),則Service Key必須在華東2(上海)建立。
在標準加密頁面,單擊建立Service Key。
建立成功後,會提示您密鑰(Service Key)建立成功,且在密鑰資訊地區可以查看您的Service Key。
說明若已提示密鑰建立成功,仍未看到Service Key,可能是由於服務角色缺失導致,您可以通過重新授權恢複角色後再重新整理頁面查看Service Key。
建立用於HLS標準加密的轉碼模板組。
HLS標準加密過程中需要用到兩個轉碼模板組:不轉碼模板組和用於HLS標準加密的模板組。
其中,不轉碼模板組為系統內建的模板組,您無需建立可以直接使用;用於HLS標準加密的模板組需要您自行建立。建立方法如下:
登入ApsaraVideo for VOD控制台,選擇組態管理 > ApsaraVideo for Media Processing配置 > 轉碼模板組。
在轉碼模板組頁面建立用於HLS標準加密的模板組。
其中,封裝格式需設定為hls;在進階參數地區,必須開啟視頻加密,且加密方式勾選私人加密選項;其餘參數您可以根據實際需要進行配置,詳細的參數解釋,請參見轉碼模板。
模板建立完成後,您可以在轉碼模板組列表頁查看轉碼模板組的ID,請儲存該ID用於後續發起HLS標準加密轉碼時使用。
搭建Data Encryption Service。
調用GenerateKMSDataKey - 建立KMS資料密鑰介面產生資料密鑰(DK)和信封資料密鑰(EDK)。
調用該介面無需傳任何參數,介面調用成功後,返回參數
CiphertextBlob
即為信封資料密鑰(EDK),返回參數Plaintext
即為資料密鑰(DK);其中,CiphertextBlob
是一個AES_128的密鑰,請儲存該參數值用於後續發起標準加密轉碼時傳入。使用不轉碼模板組上傳視頻。
因在ApsaraVideo for VOD中上傳視頻時會觸發自動轉碼,而自動觸發的轉碼暫不支援HLS標準加密,因此需要HLS標準加密的視頻,在上傳時需要使用系統內建的不轉碼模板組進行上傳,以防止上傳時自動觸發轉碼。
通過ApsaraVideo for VOD控制台上傳,請參見通過ApsaraVideo for VOD控制台上傳檔案;通過服務端介面上傳,請參見媒體上傳。
配置ApsaraVideo for VOD的事件通知,當接收到視頻上傳完成的回調訊息時,則表明視頻已經上傳到ApsaraVideo for VOD中。事件通知的配置方法,請參見事件通知。
發起HLS標準加密轉碼。
調用SubmitTranscodeJobs - 提交媒體轉碼作業介面,發起HLS標準加密轉碼。
如果已經配置了ApsaraVideo for VOD的事件通知,當接收到單個清晰度轉碼完成或全部清晰度轉碼完成的回調訊息時,則表明視頻已經轉碼完成。
查看HLS標準加密結果。
轉碼完成後,您可以通過如下兩種方式來判斷標準加密是否成功。
方式一:登入ApsaraVideo for VOD控制台,選擇媒資庫 > 音/視頻 > 管理 > 視頻地址,在視頻地址頁面,如果視頻有多種格式的輸出(例如還存在格式為mp4的原始檔案),只需要查看m3u8格式的視頻流是否帶有標準加密字樣,如果存在,則表明標準加密成功。
方式二:將帶有標準加密字樣的M3U8檔案的地址拷貝出來,使用命令
curl -v "M3U8檔案地址"
,查看擷取到的M3U8內容是否存在URI="<業務方在發起標準加密時傳遞的解密URI地址,即DecryptKeyUri參數值>"
關鍵資訊,有則表明為標準加密且加密成功。
播放HLS標準加密視頻
搭建解密服務。
搭建一個本地HTTP服務,用於解密視頻。
調用DecryptKMSDataKey - 解密KMS資料密鑰密文介面進行解密,該介面返回的資料密鑰(DK)即
PlainText
是GenerateKMSDataKey - 建立KMS資料密鑰介面返回的PlainText
經過base64_decode之後的資料。如果您需要對解密地址進行安全驗證,可以通過開啟M3U8標準加密改寫(預設改寫的參數名為
MtsHlsUriToken
)實現對HLS資料訪問過程的再次加密保護。M3U8標準加密改寫的開啟方式及技術原理請參見HLS(M3U8)標準加密改寫。根據您是否開啟M3U8標準加密改寫,搭建解密服務的代碼實現不同,具體如下:開啟M3U8標準加密改寫(推薦)
未開啟M3U8標準加密改寫
擷取視頻播放地址和憑證。
調用GetVideoPlayAuth - 擷取音視頻播放憑證介面擷取播放憑證或調用GetPlayInfo - 擷取音視頻播放地址介面擷取播放地址。
播放加密視頻。
HLS標準加密支援所有的HLS播放器,您可以選擇使用自研的播放器或阿里雲播放器進行播放加密視頻。
如果使用阿里雲播放器,請按照阿里雲播放器的要求擷取令牌和鑒權資訊後播放,詳情請參見播放HLS標準加密視頻-Web端。如果使用非阿里雲播放器,請自行實現播放邏輯。
使用阿里雲播放器測試播放的內部流程解析如下:
開啟M3U8標準加密改寫(推薦)
流程
擷取M3U8檔案地址後,播放器會解析M3U8檔案中的EXT-X-KEY標籤中的URI並訪問,從而擷取到帶密文密鑰的解密介面URI,此URI為您發起標準加密時傳遞的加密配置 EncryptConfig中的
DecryptKeyUri
參數值。只允許合法使用者才可以訪問,那麼需要播放器在擷取解密密鑰時攜帶您承認的認證資訊,認證資訊可以通過MtsHlsUriToken參數傳入。
播放器在解析到解密地址URI時會自動請求解密介面擷取解密密鑰,拿到解密密鑰去解密加密過的ts檔案進行播放。
樣本
視頻的播放地址為:
https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8
,則請求時需要攜帶MtsHlsUriToken
參數傳入最終請求地址為:
https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8?MtsHlsUriToken=<令牌>
解密地址為:
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT****
最終解密請求地址為:
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT****&MtsHlsUriToken=<頒發的令牌>
未開啟M3U8標準加密改寫
流程
擷取M3U8檔案地址後,播放器會解析M3U8檔案中的
EXT-X-KEY
標籤中的URI並訪問,從而擷取到帶密文密鑰的解密介面URI,此URI為您發起標準加密時傳遞的加密配置 EncryptConfig中的DecryptKeyUri
參數值。播放器在解析到解密地址URI時會自動請求解密介面擷取解密密鑰,拿到解密密鑰去解密加密過的ts檔案進行播放。
樣本
視頻的播放地址為:
https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8
最終請求地址為:
https://demo.aliyundoc.com/encrypt-stream****-hd.m3u8
解密地址為:
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT****
最終解密請求地址為:
https://demo.aliyundoc.com?CipherText=ZjJmZGViNzUtZWY1Mi00Y2RlLTk3MTMtOT****