配置M3U8標(biāo)準(zhǔn)加密改寫
開啟M3U8標(biāo)準(zhǔn)加密改寫功能后,可以改寫HLS(HTTP Live Streaming)協(xié)議的M3U8文件(Media Playlist,媒體播放列表)。改寫成功后會(huì)在M3U8文件內(nèi)#EXT-X-KEY
標(biāo)簽后面增加加密參數(shù)(包括加密算法、密鑰URI地址和鑒權(quán)參數(shù)),客戶端收到被改寫的M3U8文件以后,將會(huì)使用帶鑒權(quán)參數(shù)的密鑰URI來發(fā)起請求,從CDN節(jié)點(diǎn)獲取到密鑰以后將會(huì)使用對(duì)應(yīng)的加密算法和密鑰來解密TS文件。即通過配置M3U8標(biāo)準(zhǔn)加密改寫功能,可以實(shí)現(xiàn)對(duì)HLS數(shù)據(jù)訪問過程的加密保護(hù)。
背景信息
HLS(HTTP Live Streaming的縮寫)是一個(gè)由蘋果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議。HLS協(xié)議基于HTTP協(xié)議,客戶端按照順序使用HTTP協(xié)議下載存儲(chǔ)在服務(wù)器上的文件。HLS協(xié)議規(guī)定,視頻的封裝格式是TS(Transport Stream),除了TS視頻文件本身,還定義了用來控制播放的M3U8文件(文本文件)。HLS協(xié)議的工作原理是把整個(gè)視頻流分割成一個(gè)個(gè)小的TS格式視頻文件來傳輸,在開始一個(gè)流媒體會(huì)話時(shí),客戶端會(huì)先下載一個(gè)包含TS文件URL地址的M3U8文件(相當(dāng)于一個(gè)播放列表),給客戶端用于下載TS文件。
HLS基本字段:
#EXTM3U
:M3U8文件頭,必須放在第一行。EXT-X-MEDIA-SEQUENCE
:第一個(gè)TS分片的序列號(hào),一般情況下是0,但是在直播場景下,這個(gè)序列號(hào)標(biāo)識(shí)直播段的起始位置;#EXT-X-MEDIA-SEQUENCE:0
。#EXT-X-TARGETDURATION
:每個(gè)分片TS的最大的時(shí)長;#EXT-X-TARGETDURATION:10
,表示每個(gè)分片的最大時(shí)長是10秒。#EXT-X-ALLOW-CACHE
:是否允許cache,#EXT-X-ALLOW-CACHE:YES
、#EXT-X-ALLOW-CACHE:NO
,默認(rèn)情況下是YES。#EXT-X-ENDLIST
:M3U8文件結(jié)束符。#EXTINF
:extra info,分片TS的信息,如時(shí)長,帶寬等;一般情況下是#EXTINF:<duration>,[<title>]
后面可以跟其他的信息,逗號(hào)之前是當(dāng)前分片的TS時(shí)長。分片時(shí)長要小于#EXT-X-TARGETDURATION
定義的值。#EXT-X-VERSION
:M3U8版本號(hào)。#EXT-X-DISCONTINUITY
:該標(biāo)簽表明其前一個(gè)切片與下一個(gè)切片之間存在中斷。#EXT-X-PLAYLIST-TYPE
:表明流媒體類型。#EXT-X-KEY
:是否加密解析。例如:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx"
加密算法是AES-128,密鑰通過請求https://example.com/video.key?token=xxx
來獲取,密鑰請求回來以后存儲(chǔ)在本地,并用于解密后續(xù)下載的TS視頻文件。
技術(shù)原理
客戶端向CDN節(jié)點(diǎn)發(fā)起對(duì)M3U8文件的訪問請求,例如:
http://example.com/media/index.m3u8?MtsHlsUriToken=xxx
。CDN節(jié)點(diǎn)對(duì)客戶端的訪問請求進(jìn)行校驗(yàn),校驗(yàn)通過。
CDN節(jié)點(diǎn)從源站下載原始M3U8文件,并緩存原始M3U8文件。
CDN節(jié)點(diǎn)對(duì)原始M3U8文件的
#EXT-X-KEY
標(biāo)簽進(jìn)行改寫,增加加密方式、密鑰URI和鑒權(quán)參數(shù),例如:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?MtsHlsUriToken=xxx"
。CDN節(jié)點(diǎn)將改寫后的M3U8文件返回給客戶端。
客戶端解析改寫后的M3U8文件,拿到密鑰URI地址
https://example.com/video.key?MtsHlsUriToken=xxx
,并發(fā)起訪問請求。CDN節(jié)點(diǎn)收到客戶端請求,鑒權(quán)通過之后,將key文件返回給客戶端。
客戶端繼續(xù)解析改寫后的M3U8文件,從CDN節(jié)點(diǎn)下載其中的TS視頻文件。
客戶端使用key文件內(nèi)的密鑰和前面
#EXT-X-KEY
標(biāo)簽內(nèi)定義的加密算法來解密TS視頻文件。
適用場景
HLS協(xié)議采用M3U8文件來告知客戶端視頻文件播放列表,客戶端拿到M3U8文件以后就可以直接播放視頻,為了避免源站的視頻文件被非授權(quán)客戶端訪問,需要對(duì)HLS協(xié)議使用的TS視頻文件做加密,對(duì)TS視頻文件做了加密以后,還需要告知客戶端解密方法,這里就可以通過配置M3U8標(biāo)準(zhǔn)加密改寫功能,通過#EXT-X-KEY
標(biāo)簽來告知客戶端加密算法、密鑰URI和鑒權(quán)key。
操作步驟
登錄CDN控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊域名管理。
在域名管理頁面,找到目標(biāo)域名,單擊操作列的管理。
在指定域名的左側(cè)導(dǎo)航欄,單擊視頻相關(guān)。
在M3U8標(biāo)準(zhǔn)加密改寫區(qū)域,打開M3U8標(biāo)準(zhǔn)加密改寫開關(guān)。
說明開啟M3U8標(biāo)準(zhǔn)加密改寫功能后,默認(rèn)的參數(shù)名為
MtsHlsUriToken
。可選:如果您需要配合您的客戶端修改參數(shù)名,請執(zhí)行以下操作步驟。
單擊自定義參數(shù)名對(duì)應(yīng)的修改。
在自定義參數(shù)名對(duì)話框,設(shè)置參數(shù)名。
說明參數(shù)名大小寫敏感,請確保設(shè)置的參數(shù)名和客戶端請求攜帶的參數(shù)名完全一致。例如客戶端請求攜帶
foobar
參數(shù),如果在CDN控制臺(tái)設(shè)置自定義參數(shù)名為FooBar
將不生效。單擊確定,完成配置。
演示示例
在CDN控制臺(tái)開啟M3U8標(biāo)準(zhǔn)加密改寫,并設(shè)置自定義參數(shù)名為foobar
,如下圖所示。
客戶端請求中攜帶自定義的foobar
參數(shù),參數(shù)的值為yyyy
,當(dāng)CDN解密播放時(shí),會(huì)將foobar=yyyy
追加到M3U8文件中#EXT-X-KEY
標(biāo)簽的URI末尾,如下圖所示。