HLS標準加密採用AES_128演算法,能夠適配所有HLS播放器,並需結合密鑰管理與令牌服務,廣泛應用於線上教育、獨播劇等高安全需求領域。本文將介紹視頻的HLS加密與解密播放方法。
工作原理
ApsaraVideo for VOD採用信封加密技術,業務方通過阿里雲KMS產生資料密鑰(DK)和信封密鑰(EDK);使用DK加密視頻後,同時儲存加密視頻和(EDK)。終端播放時通過解密服務擷取(DK)進行視頻解密播放。
如果您需要對解密地址進行安全驗證,可以通過開啟M3U8標準加密改寫(預設改寫參數名為MtsHlsUriToken)實現對HLS資料訪問過程的再次加密保護。M3U8標準加密改寫的開啟方式及技術原理請參見配置M3U8標準加密改寫。
前提條件
阿里雲視頻加密(HLS 標準加密)屬於免費服務,但需通過視頻轉碼實現加密功能。轉碼操作將產生服務費用,具體計費標準請參考媒資轉碼計費。
已經開通了ApsaraVideo for VOD服務。開通步驟請參見開通ApsaraVideo for VOD。
已經授權ApsaraVideo for VOD訪問您Key Management Service的許可權,可以通過雲資源訪問授權頁面進行授權。
已在ApsaraVideo for VOD中配置加速網域名稱,具體步驟請參見添加加速網域名稱。
已安裝ApsaraVideo for VOD服務端SDK,具體步驟請參見服務端SDK。本文以Java語言為例進行說明。
加密及解密流程
上傳及加密流程

解密播放流程
開啟M3U8標準加密改寫(推薦)

未開啟M3U8標準加密改寫

加密視頻
上傳視頻並接收回調。
為確保支援HLS標準加密的視頻不被自動轉碼,在上傳至ApsaraVideo for VOD時需要使用系統內建的不轉碼模板組進行上傳,以防止上傳時自動觸發轉碼。
通過ApsaraVideo for VOD控制台上傳,請參見通過ApsaraVideo for VOD控制台上傳檔案;通過服務端介面上傳,請參見媒體上傳。
配置ApsaraVideo for VOD的事件通知,當接收到視頻上傳完成的回調訊息時,則表明視頻已經上傳到ApsaraVideo for VOD中。事件通知的配置方法,請參見事件通知。
搭建Data Encryption Service。
建立Service Key。
Service Key是Key Management Service中的主加密Key,必須用於產生標準加密金鑰。未建立將導致調用GenerateKMSDataKey - 建立KMS資料密鑰介面產生密鑰時將會報錯。
單擊頁面左上方的服務地區標識,切換到需要建立Service Key的服務地區下。
說明建立的Service Key與視頻儲存的來源站點地區必須一致,例如:視頻儲存在華東2(上海),則Service Key必須在華東2(上海)建立。

登入ApsaraVideo for VOD控制台,選擇組態管理 > ApsaraVideo for Media Processing配置 > 標準加密。
在標準加密頁面,單擊建立Service Key。
建立成功後,會提示您密鑰(Service Key)建立成功,且在密鑰資訊地區可以查看您的Service Key。
說明若已提示密鑰建立成功,仍未看到Service Key,可能是由於服務角色缺失導致,您可以通過重新授權恢複角色後再重新整理頁面查看Service Key。
調用介面產生資料密鑰。
調用GenerateKMSDataKey - 建立KMS資料密鑰介面產生資料密鑰(DK)和信封資料密鑰(EDK)時,無需傳參。成功後,返回的CiphertextBlob即為AES_128格式的(EDK),需緩衝此值用於標準加密轉碼。返回的Plaintext即為(DK)。
建立用於HLS標準加密的轉碼模板組。
HLS標準加密過程中需要用到兩個轉碼模板組:系統內建的不轉碼模板組和需要自行建立的HLS標準加密模板組。HLS標準加密模板組建立方法如下:
登入ApsaraVideo for VOD控制台,選擇組態管理 > ApsaraVideo for Media Processing配置 > 轉碼模板組。
在轉碼模板組頁面建立用於HLS標準加密的模板組。
其中,封裝格式需設定為hls;在進階參數地區,必須開啟視頻加密,且加密方式勾選私人加密選項;其餘參數您可以根據實際需要進行配置,詳細的參數解釋,請參見轉碼模板。

模板建立完成後,您可以在轉碼模板組列表頁查看轉碼模板組的ID,請儲存該ID用於後續發起HLS標準加密轉碼時使用。

發起HLS標準加密轉碼。
調用SubmitTranscodeJobs介面,發起HLS標準加密轉碼。
如果已經配置了ApsaraVideo for VOD的事件通知,當接收到單個清晰度轉碼完成或全部清晰度轉碼完成的回調訊息時,則表明視頻已經轉碼完成。
查看HLS標準加密結果。
轉碼完成後,您可以通過如下三種方式來判斷標準加密是否成功。
方式一:登入ApsaraVideo for VOD控制台,選擇媒資庫 > 音/視頻 > 管理 > 視頻地址,在視頻地址頁面,如果視頻有多種格式的輸出(例如還存在格式為mp4的原始檔案),只需要查看m3u8格式的視頻流是否帶有標準加密字樣,如果存在,則表明標準加密成功。

方式二:將帶有標準加密字樣的M3U8檔案的地址拷貝出來,使用命令
curl -v "M3U8檔案地址",查看擷取到的M3U8內容是否存在URI="<業務方在發起標準加密時傳遞的解密URI地址,即DecryptKeyUri參數值>"關鍵資訊,有則表明為標準加密且加密成功。方式三:調用GetTranscodeTask - 查詢轉碼任務詳情介面,傳入步驟四中返回參數 JobId 的值。若返回參數TranscodeTemplateId為步驟三中建立的轉碼模板組ID且TranscodeJobStatus為轉碼成功,則表明為標準加密且加密成功。
HLS(M3U8)標準加密改寫(推薦)
開啟M3U8標準加密改寫功能後,系統會在HLS協議的Media Playlist(M3U8檔案)中#EXT-X-KEY標籤後自動添加加密參數(如密碼編譯演算法、密鑰URI及鑒權參數)。用戶端解析改寫後的M3U8檔案時,將使用帶鑒權參數的密鑰URI請求密鑰,通過密鑰和指定演算法解密TS分區,從而實現HLS流媒體的加密訪問保護
步驟一:開啟標準加密參數透傳
在ApsaraVideo for VOD控制台開啟HLS標準加密參數透傳。
開啟HLS標準加密參數透傳後,可改寫HLS協議的M3U8檔案,具體為修改#EXT-X-KEY標籤中的URI,在其末尾追加用戶端請求攜帶的參數,預設參數名為MtsHlsUriToken。
前提條件
已配置跨域訪問,詳情請參見配置跨域資源共用。
政務雲暫不支援該功能。
操作步驟
登入點播控制台。
在左側導覽列,單擊組態管理。
單擊分發加速配置 > 網域名稱管理,進入網域名稱管理頁面。
在指定網域名稱右側的操作列,單擊配置。
在指定網域名稱的左側導覽列,單擊視頻相關。
在加密播放地區,開啟HLS標準加密參數透傳開關。

開啟後,HLS標準加密參數透傳時,將通過改寫Token鑒權資訊參數幫您鑒權。改寫的參數名稱為
MtsHlsUriToken,參數的值為test。當CDN解密播放時,會將MtsHlsUriToken=test追加到M3U8檔案中#EXT-X-KEY標籤的URI末尾。
步驟二:攜帶MtsHlsUriToken參數請求
用戶端攜帶MtsHlsUriToken參數向CDN節點發起對M3U8檔案的訪問請求。
其中,MtsHlsUriToken需要您自行搭建令牌服務,頒發使用者令牌(即產生MtsHlsUriToken)。
下述代碼所產生的Token即是MtsHlsUriToken。下述Java範例程式碼中,您需要按實際情況變更的參數如下:
步驟三:解密播放檔案
CDN節點收到用戶端請求後,鑒權通過則解密播放檔案。
若上述步驟二中產生的MtsHlsUriToken參數值為test,則當CDN解密播放時,會將MtsHlsUriToken=test追加到M3U8檔案中#EXT-X-KEY標籤的URI末尾。
具體的鑒權校正邏輯您需要自行實現,可以參考播放視頻中開啟M3U8標準加密改寫方式的解密服務的範例程式碼。
播放視頻
開啟M3U8標準加密改寫(推薦)
搭建解密服務。
搭建一個本地HTTP服務,用於解密視頻。
調用DecryptKMSDataKey - 解密KMS資料密鑰密文介面進行解密,該介面返回的資料密鑰(DK)即
PlainText是GenerateKMSDataKey - 建立KMS資料密鑰介面返回的PlainText經過base64_decode之後的資料。如果您需要對解密地址進行安全驗證,可以通過開啟M3U8標準加密改寫(預設改寫的參數名為
MtsHlsUriToken)實現對HLS資料訪問過程的再次加密保護。根據您是否開啟M3U8標準加密改寫,搭建解密服務的代碼實現不同,具體如下:擷取視頻播放地址和憑證。
調用GetVideoPlayAuth - 擷取音視頻播放憑證介面擷取播放憑證或調用GetPlayInfo - 擷取音視頻播放地址介面擷取播放地址。
播放加密視頻。
HLS標準加密支援所有的HLS播放器,您可以選擇使用自研的播放器或阿里雲播放器進行播放加密視頻。
如果使用阿里雲播放器,請按照阿里雲播放器的要求擷取令牌和鑒權資訊後播放,詳情請參見如何播放加密視頻。如果使用非阿里雲播放器,請自行實現播放邏輯。
使用阿里雲播放器測試播放的內部流程解析如下:
開啟M3U8標準加密改寫(推薦)
未開啟M3U8標準加密改寫
搭建解密服務。
搭建一個本地HTTP服務,用於解密視頻。
調用DecryptKMSDataKey - 解密KMS資料密鑰密文介面進行解密,該介面返回的資料密鑰(DK)即
PlainText是GenerateKMSDataKey - 建立KMS資料密鑰介面返回的PlainText經過base64_decode之後的資料。具體樣本如下:
擷取視頻播放地址和憑證。
調用GetVideoPlayAuth - 擷取音視頻播放憑證介面擷取播放憑證或調用GetPlayInfo - 擷取音視頻播放地址介面擷取播放地址。
播放加密視頻。
HLS標準加密支援所有的HLS播放器,您可以選擇使用自研的播放器或阿里雲播放器進行播放加密視頻。
如果使用阿里雲播放器,請按照阿里雲播放器的要求擷取令牌和鑒權資訊後播放,詳情請參見如何播放加密視頻。如果使用非阿里雲播放器,請自行實現播放邏輯。
使用阿里雲播放器測試播放的內部流程解析如下:
未開啟M3U8標準加密改寫