目前ABR(adaptive bitrate 自適應碼率技術)是一種主流的視頻播放格式,HLS,HSS和HDS運用得比較廣泛。多屏視頻播放也是一個趨勢,包括手機,平板,電腦,電視機,機頂盒等融合在一起,不同的場合不同的網絡情況,可能會選擇不同的設備去播放視頻。
在視頻solution的測試中,我們的系統一般的終端播放格式就包含了HLS,HSS,HDS,會根據不同的device去選擇不同的播放格式,比如iPhone會選擇HLS,PC會選擇HSS等。對於不加密的HLS,HSS,HDS都有player來播放,HLS用iPhone,Mac上的safari就可以播放,或者是quicktime,HSS則可以選擇silverlight的插件進行播放,HDS是用comcast lab做的一個插件。而對於加密的HLS,HSS,HDS,加密的系統多種多樣,測試過的有comcast的CKM,verimatrix,VG,Insys,Irdeto,Playready等,大多數時候沒有player來測試。這時workaround就是按照下面的流程來測試,比如HSS 的manifest 文件中,如果進行了DRM加密后,需要check 是否有ProtectionHeader 的字段,可以看到下面用Insys DRM加密后有一大段Key的info。
1. wget (curl) HSS manifest.
2. check HSS manifest include key info.
3. check DRM system related logs and make sure key is create successfully.
4. check our system related logs.
5. wget ts segment and compared with no-DRM segment.
HSS with Insys DRM
<?xml version="1.0"?> <SmoothStreamingMedia MajorVersion="2" MinorVersion="2" CanPause="true" CanSeek="true" Duration="1360000000" Timescale="10000000"> <Protection> <ProtectionHeader SystemID="{9A04F079-9840-4286-AB92-E65BE0885F95}">2gIAAAEAAQDQAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AWABlADQAaQBQADQAZwBkAE8AVQArAEEAbABUAEkAcwBWAHMAOABhAFcAUQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgA2ADMAMQBqADcAeQB2AHcALwBuAE0APQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcAByAC0AcwB0AGEAZwBlAC4AZAByAG0ALgBpAG4AcwB5AHMAYwBkAC4AbgBlAHQALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEQAUwBfAEkARAA+AEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEAPQA9ADwALwBEAFMAXwBJAEQAPgA8AC8ARABBAFQAQQA+ADwALwBXAFIATQBIAEUAQQBEAEUAUgA+AA== </ProtectionHeader> </Protection> <StreamIndex Type="text" Name="cc_frag_eng_" Language="eng_" SubType="CAPT" Chunks="69" Timescale="10000000" Url="QualityLevels({bitrate})/Fragments(cc_frag_eng_={start time})"> <QualityLevel Index="0" Bitrate="1308347" FourCC="TTML"/> <QualityLevel Index="1" Bitrate="1004888" FourCC="TTML"/> <QualityLevel Index="2" Bitrate="1814104" FourCC="TTML"/> <QualityLevel Index="3" Bitrate="3668563" FourCC="TTML"/> <QualityLevel Index="4" Bitrate="7040300" FourCC="TTML"/> <c t="20020000" d="20020000"/> <c t="40040000" d="20020000"/> <c t="60060000" d="20020000"/>
HSS with no DRM
<?xml version="1.0"?> <SmoothStreamingMedia MajorVersion="2" MinorVersion="2" CanPause="true" CanSeek="true" Duration="1360000000" Timescale="10000000"> <StreamIndex Type="text" Name="cc_frag_eng_" Language="eng_" SubType="CAPT" Chunks="69" Timescale="10000000" Url="QualityLevels({bitrate})/Fragments(cc_frag_eng_={start time})"> <QualityLevel Index="0" Bitrate="1308347" FourCC="TTML"/> <QualityLevel Index="1" Bitrate="1004888" FourCC="TTML"/> <QualityLevel Index="2" Bitrate="1814104" FourCC="TTML"/> <QualityLevel Index="3" Bitrate="3668563" FourCC="TTML"/> <QualityLevel Index="4" Bitrate="7040300" FourCC="TTML"/> <c t="20020000" d="20020000"/> <c t="40040000" d="20020000"/> <c t="60060000" d="20020000"/> <c t="80080000" d="20020000"/> <c t="100100000" d="20020000"/> <c t="120120000" d="20020000"/> <c t="140140000" d="20020000"/> <c t="160160000" d="20020000"/> <c t="180180000" d="20020000"/> <c t="200200000" d="20020000"/> <c t="220220000" d="20020000"/> <c t="240240000" d="20020000"/> <c t="260260000" d="20020000"/> <c t="280280000" d="20020000"/> <c t="300300000" d="20020000"/> <c t="320320000" d="20020000"/> <c t="340340000" d="20020000"/>
HLS master m3u8 會包含幾種bitrate的信息,而每一種sub bitrate m3u8則包含沒個ts segment的信息。如果是加密帶有DRM信息的HLS 文件,master m3u8不含有Key和license的信息,而每一種sub bitrate m3u8則會含有key的信息。今天在項目的系統中調試了Verimatrix, VG DRM這兩種DRM,下面可以看看key的部分還是有不同的。
HLS sub m3u8 manifest with Verimatrix DRM
#EXTM3U #EXT-X-TARGETDURATION:11 #EXT-X-VERSION:4 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-KEY:METHOD=AES-128,URI="http://127.0.0.1:8260/hls/client/keyfile/vod003" #EXTINF:10.01, 1308347/30960.ts #EXTINF:10.01, 1308347/931860.ts #EXTINF:10.01, 1308347/1832760.ts #EXTINF:10.01, 1308347/2733660.ts #EXTINF:10.01, 1308347/3634560.ts #EXTINF:10.01, 1308347/4535460.ts #EXTINF:10.01, 1308347/5436360.ts #EXTINF:10.01, 1308347/6337260.ts #EXTINF:10.01, 1308347/7238160.ts #EXTINF:10.01, "1308347.m3u8.2" 33L, 634C
HLS sub m3u8 manifest with VG DRM
#EXTM3U #EXT-X-TARGETDURATION:11 #EXT-X-VERSION:4 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-KEY:METHOD=AES-128,URI="8170110000080C0D9277D62C121EF1A2763B6E00", IV=0xB7295D642E8F4A65316B8221CB4654A0 #EXTINF:10.01, 1308347/30960.ts #EXTINF:10.01, 1308347/931860.ts #EXTINF:10.01, 1308347/1832760.ts #EXTINF:10.01, 1308347/2733660.ts #EXTINF:10.01, 1308347/3634560.ts #EXTINF:10.01, 1308347/4535460.ts #EXTINF:10.01, 1308347/5436360.ts #EXTINF:10.01, 1308347/6337260.ts #EXTINF:10.01,
HLS sub m3u8 manifest with no DRM
#EXTM3U #EXT-X-TARGETDURATION:11 #EXT-X-VERSION:4 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD #EXTINF:10.01, 1308347/30960.ts #EXTINF:10.01, 1308347/931860.ts #EXTINF:10.01, 1308347/1832760.ts #EXTINF:10.01, 1308347/2733660.ts #EXTINF:10.01, 1308347/3634560.ts #EXTINF:10.01, 1308347/4535460.ts #EXTINF:10.01, 1308347/5436360.ts #EXTINF:10.01, 1308347/6337260.ts #EXTINF:10.01,