MPEG DASH作為三大流媒體協議之一,誕生的目的是為了統一標准,因此是兼容SmoothStreaming和HLS的,然而協議內容較多,相對復雜,從各自協議的頁數對比就能看出。
MPD:Media Presentation Description.
描述整個mpeg dash碼流的構成,相當於HLS協議的m3u8文件,MPD是一個XML Document,通過MPD的內容可以構造出用於HTTP GET下載的URL。MPD文件可以被加密,請參考http://www.w3.org/TR/xmlenc-core/,可以使用數字簽名和驗證,請參考http://www.w3.org/TR/xmldsig-core/。
注:XML標准是由W3C制定的,關於XML schema:http://www.w3.org/2001/XMLSchema。
Mpegdash和HLS,以及Smooth Streaming的對比:
Smooth Streaming我自己不太了解。mpeg dash試圖同時兼容這兩種協議,因此顯得更為復雜,同時支持TS profile和 ISO profile,支持節目觀看等級控制,支持父母鎖?mpeg dash支持的DRM類型包括PlayReady和Marlin,而HLS支持的是AES128(密鑰長度為128位的高級加密標准Advanced Encryption Standard)加密類型。
Period:
一條完整的mpeg dash碼流可能由一個或多個Period構成,每個Period代表某一個時間段。比如某條碼流有60秒時間,Period1從0-15秒,Period2從16秒到40秒,Period3從41秒到60秒。同一個Period內,意味着可用的媒體內容及其各個可用碼率(Representation)不會發生變更。直播情況下,“可能”需要周期地去服務器更新MPD文件,服務器可能會移除舊的已經過時的Period,或是添加新的Period。新的Period中可能會添加新的可用碼率或去掉上一個Period中存在的某些碼率(Representation)。
Adaptationset:
一個Period由一個或者多個Adaptationset組成。Adaptationset由一組可供切換的不同碼率的碼流(Representation)組成,這些碼流中可能包含一個(ISO profile)或者多個(TS profile)media content components,因為ISO profile的mp4或者fmp4 segment中通常只含有一個視頻或者音頻內容,而TS profile中的TS segment同時含有視頻和音頻內容,當同時含有多個media component content時,每個被復用的media content component將被單獨描述。
media content component:
一個media content component表示表示一個不同的音視頻內容,比如不同語言的音軌屬於不同的media content component,而同一音軌的不同碼率(mpeg dash中叫做Representation)屬於相同的media content component。如果是TS profile,同一個碼率可能包括多個media content components。
Representation:
每個Adaptationset包含了一個或者多個Representations,一個Representation包含一個或者多個media streams,每個media stream對應一個media content component。為了適應不同的網絡帶寬,dash客戶端可能會從一個Representation切換到另外一個Representation,如果不支持某個Representation的編碼格式,在切換時可以忽略之。
media content component,Representation,media stream的關系:
一個media content component可包含多個不同的編碼版本(Encoded Versions),每一個編碼版本都是一個media stream,每個Representation可包含1..N個media stream(TS profile ,在同一個Segment中復用了音頻和視頻。),每個media stream對應一個不同的media content component。
Sub-Representation:
一個Representation可能包含多個Sub-Representation,這種情況還沒遇到過。
Segment:
與HLS協議的segment概念是一樣的,每個Representation由一個或者多個segment組成,只由一個segment組成的形式不能應用於網絡直播。每個segment由一個對應的URL指定,也可能由相同的URL+不同的byte range指定。dash 客戶端可以通過HTTP協議來獲取URL(+byte range)對應的分片數據。MPD中描述segment URL的形式有多種,如Segment list,Segment template,Single segment。
Initialization Segment:
Representation的Segments一般都采用1個Init Segment+多個普通Segment的方式,還有一種形式就是Self Initialize Segment,這種形式沒有單獨的Init Segment,初始化信息包括在了各個Segment中。Init Segment中包含了解封裝需要的全部信息,比如Representation中有哪些音視頻流,各自的編碼格式及參數。對於 ISO profile來說(容器為MP4),包含了moov box,H264的sps/pps數據等關鍵信息存放於此(avCc box)。
另外,同一個Adaptation set的多個Representation還可能共享同一個Init Segment,該種情況下,對於ISO profile來說,諸如stsd box,avCc box等重要的box會含有多個entry,每個entry對應一個Representation,第一個entry對應第一個Representation,第二個entry對應第二個Representation,以此類推。
Subsegment:
Segment可能進一步划分為subsegment,每個subsegment由數個Acess Unit組成,Segment index提供了subsegment相對於Segment的字節范圍和presentation time range 。客戶端可以先下載Segment index。
Subset:
每個Period可能包含多個Subset,Subset定義 了一個集合,該集合包含1個或者多個AdaptationSet。客戶端在播放mpeg dash流時,要求任何時間播放的所有AdaptationSets必須是某個Subset包含的AdaptationSets的一個子集。
SAP和無縫切換以及SEEK
SAP:Stream Acess Point,可以簡單理解為I幀,每個Segment的第一個幀都是SAP,因此Seek時可直接Seek到某一個Segment的起始位置,利用Init Segment+Seek到的某個Segment的數據,在解封裝后可實現完美解碼。一般來說,同一個Adaptation set中的多個Representation是Segment Align的(當Adaptation set的屬性@segmentAlignment不為false時),因此,當從Representation A切換到Representation B時,如果當前Representation A的第N個Segment已經下載完成,切換時直接下載Representation B的第N+1個Segment即可。