流媒體DASH協(xié)議詳解
- 2019-09-27 15:35:00
- admin 原創(chuàng)
- 27936
DASH(MPEG-DASH)是 Dynamic Adaptive Streaming over HTTP的縮寫,是國際標準組 MPEG 2014年推出的技術(shù)標準, 主要目標是形成IP網(wǎng)絡(luò)承載單一格式的流媒體并提供高效與高質(zhì)量服務(wù)的統(tǒng)一方案, 解決多制式傳輸方案(HTTP Live Streaming, Microsoft Smooth Streaming, HTTP Dynamic Streaming)并存格局下的存儲與服務(wù)能力浪費、運營高成本與復(fù)雜度、系統(tǒng)間互操作弱等問題.
DASH是基于HTTP的動態(tài)自適應(yīng)的比特率流技術(shù),使用的傳輸協(xié)議是TCP(有些老的客戶端直播會采用UDP協(xié)議直播, 例如YY, 齊齊視頻等). 和HLS, HDS技術(shù)類似, 都是把視頻分割成一小段一小段, 通過HTTP協(xié)議進行傳輸,客戶端得到之后進行播放;不同的是MPEG-DASH支持MPEG-2 TS、MP4等多種格式, 可以將視頻按照多種編碼切割, 下載下來的媒體格式既可以是ts文件也可以是mp4文件, 所以當客戶端加載視頻時, 按照當前的網(wǎng)速和支持的編碼加載相應(yīng)的視頻片段進行播放.
DASH的整個流程
主播直播流上傳
服務(wù)器的編解碼封裝
流媒體分發(fā)器
mpd文件
切割后的媒體文件
客戶端
客戶端加載mpd文件
解析MPD文件, 組成文件下載鏈接
當前的網(wǎng)速和支持的編碼加載相應(yīng)的視頻片段進行播放
MPD文件內(nèi)容
MPD文件構(gòu)成
MPD 標簽
屬性:
profiles: 不同的profile對應(yīng)不同的MPD要求和Segment格式要求mediaPresentationDuration:整個節(jié)目的時長
minBufferTime: 至少需要緩沖的時間
type:點播對應(yīng)static,直播對應(yīng)dynamic
availabilityStartTime=2019-05-22T22:16:57Z:如果是直播流的話,則必須提供,代表MPD中所有Seg從該時間開始可以request了
minimumUpdatePeriod=PT10H:至少每隔這么長時間,MPD就有可能更新一次,只用于直播流BaseURL 根目錄
該元素可以在MPD\\Period\\AdaptationSet\\Representation同時出現(xiàn),若同時出現(xiàn),則層層嵌套;在每一層也可以出現(xiàn)多次,默認使用第一個BaseURL;
3. Period 區(qū)段
一條完整的mpegdash碼流可能由一個或多個Period構(gòu)成,每個Period代表某一個時間段。比如某條碼流有60秒時間,Period1從0-15秒,Period2從16秒到40秒,Period3從41秒到60秒。同一個Period內(nèi),意味著可用的媒體內(nèi)容及其各個可用碼率(Representation)不會發(fā)生變更。直播情況下,“可能”需要周期地去服務(wù)器更新MPD文件,服務(wù)器可能會移除舊的已經(jīng)過時的Period,或是添加新的Period。新的Period中可能會添加新的可用碼率或去掉上一個Period中存在的某些碼率, 即上面的 Representation 字段
屬性:
duration:Period的時長;
start:Period的開始時間
4. AdaptationSet 自適應(yīng)子集
一個Period由一個或者多個Adaptationset組成。Adaptationset由一組可供切換的不同碼率的碼流(Representation)組成,這些碼流中可能包含一個(ISO profile)或者多個(TS profile)media content components,因為ISO profile的mp4或者fmp4 segment中通常只含有一個視頻或者音頻內(nèi)容,而TS profile中的TS segment同時含有視頻和音頻內(nèi)容. 當同時含有多個media component content時,每個被復(fù)用的media content component將被單獨描述。
屬性:
segmentAlignment: 如果為true,則代表該AS中的segment互不重疊
startWithSAP: 每個Segment的第一幀都是關(guān)鍵幀
mimeType AdaptationSet 的媒體類型
minWidth 最小寬度
par 寬高比
contentType: 內(nèi)容類型
5. media content component 媒體內(nèi)容
一個media content component表示表示一個不同的音視頻內(nèi)容,比如不同語言的音軌屬于不同的media content component,而同一音軌的不同碼率(mpeg dash中叫做Representation)屬于相同的media content component。如果是TS profile,同一個碼率可能包括多個media content components。
6. SegmentTemplate 片段模板
組成下載 Representation 的URL 模板
屬性:
media: 指定用來生成Segment列表的模板,可以包含的通配符有$RepresentaonID$,$Bandwidth$,$Number$, $Time$
7. Representation 媒體文件描述
每個Adaptationset包含了一個或者多個Representations,一個Representation包含一個或者多個media streams,每個media stream對應(yīng)一個media content component。為了適應(yīng)不同的網(wǎng)絡(luò)帶寬,dash客戶端可能會從一個Representation切換到另外一個Representation
屬性:
codecs=avc1.640028
解碼器標準
bandwidth=3200000
需要帶寬 3.2Mbps
8. segment 切片
每個Representation由一個或者多個segment組成,每個segment由一個對應(yīng)的URL指定,也可能由相同的URL+不同的byte range指定。dash 客戶端可以通過HTTP協(xié)議來獲取URL(+byte range)對應(yīng)的分片數(shù)據(jù)。MPD中描述segment URL的形式有多種,如Segment list,Segment template,Single segment。
單獨介紹一個特殊的segment : Initialization Segment(初始化片段),
Representation的Segments一般都采用1個Init Segment+多個普通Segment的方式,還有一種形式就是Self Initialize Segment,這種形式?jīng)]有單獨的Init Segment,初始化信息包括在了各個Segment中。Init Segment中包含了解封裝需要的全部信息,比如Representation中有哪些音視頻流,各自的編碼格式及參數(shù)。對于 ISO profile來說(容器為MP4),包含了moov box,H264的sps/pps數(shù)據(jù)等關(guān)鍵信息存放于此(avCc box)。
切片內(nèi)容
fMP4(fragmented MP4),可以簡單理解為分片化的MP4,是DASH采用的媒體文件格式,文件擴展名通常為(.m4s或直接用.mp4), 或者分別切分成mpa(音頻), m4v(視頻);
fMP4 由分片組成,可以按整個文件存儲,也可以按分片存儲:
如果按照單個文件存儲,每個輸出是一個m4s文件。
完整的fMP4視頻可以描述為如下形式:
moov + (moof + mdat) * N
如果按照分片存儲,每個分片是一個m4s文件,輸出對應(yīng)了多個m4s。
fMP4中的第一個分片,對應(yīng)了DASH協(xié)議中Initialization Segment;其后的分片,則對應(yīng)Media Segment。
注:
moov: Movie Box,它是一種container box,子box里包含了媒 體的metadata信息;
moof: moofbox,這個box是視頻分片的描寫敘述信息, 即分片(fragment)的標識
mdat: mdatbox 實際媒體數(shù)據(jù)。我們終于解碼播放的數(shù)據(jù)都在這里面
前端工作
加載視頻說明mpd文件
識別mpd內(nèi)容
判斷網(wǎng)速加載第一個適合該網(wǎng)速的視頻片段, 解析視頻數(shù)據(jù)
視頻數(shù)據(jù)通過 MSE(Media Source Extensions) API 把視頻數(shù)據(jù)傳輸給Video播放
不斷通過加載視頻片段大小/下載時間得出網(wǎng)速, 下載相應(yīng)碼率的視頻
自己動手做DEMO
1. 下載MP4Box( 切片工具)
https://gpac.wp.imt.fr/downloads/gpac-nightly-builds/
注: 安裝后 application 中的 GPAC 是個播放器, 我們需要的是它文件里的下面的MP4Box 工具
執(zhí)行命令
sudo /Applications/GPAC.app/Contents/MacOS/MP4Box -dash-
strict
5000 -profile dashavc264:live -rap /Users/lijiancheng/Documents/mse/assert/foo.mp4#video /Users/lijiancheng/Documents/mse/assert/foo.mp4#audio -
out
index.mpd
引入Dash.js(開源庫)
html
<script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>video src標明地址
html
<video data-dashjs-player autoplay src="./assert/index.mpd" controls></video>
別人的DASH DEMO
http://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html
http://demo.theoplayer.com/test-your-stream-with-statistics
https://bitmovin.com/demos/stream-test
DASH 切片工具
FFmpeg
MP4Box
Dash開源庫
Dash.js 前端播放
聯(lián)系人: | 北極星通公司 |
---|---|
電話: | 010-56545416 |
傳真: | 010-82896426 |
Email: | support@bjsin.cn |
QQ: | 35338585 |
微信: | Aoku2017 | QQ群:241759321 |
地址: | 北京市中關(guān)村生命科學(xué)園創(chuàng)意園3-3-103 |