MPEG-DASH簡介

DASH 簡介

DASH (Dynamic Adaptive Streaming over HTTP)是一種基于HTTP的使用TCP傳輸協議的自適應比特率的流媒體傳輸技術矾屯。

客戶端將根據當前網絡條件自適應地選擇下載和播放當前網絡能夠承載的最高比特率版本,這樣既可以保證當前媒體的質量又能避免由于碼率過高導致的播放卡頓浮入。

類似HLS盐固,DASH由描述文件(mpd)和多分辨率的媒體文件(fmp4)組成。

MPD文件 簡介

MPD (Media Presentation Description)是一個XML文件外里,它完整描述了DASH內容的所有信息领铐,包括各類音視頻參數、內容分段時長荐糜、不同媒體分段的碼率和分辨率以及對應的訪問地址URL等等

image.png

Period

Period代表一段連續(xù)的視頻片段, 一個DASH文件可以包含一個或多個Periods

AdaptationSet

一個Period由一個或多個AdaptationSets組成巷怜。每個AdaptationSet包含了邏輯一致的可供切換的不同碼率的碼流(Representation)。

Representation

每個Representation表示同一媒體內容但編碼參數互不相同的音視頻數據狞尔。包含了相同媒體內容的不同配置丛版,即不同的分辨率、碼率等偏序,以供客戶端根據自身的網絡條件和性能限制來選擇合適的版本下載播放。

Segment

每個Representation中的內容按時間或者其他規(guī)則被切分成一段段Segments胖替,使得客戶端在播放時能夠靈活地在不同的Representations之間進行切換研儒。每個Segment都有一個唯一的與之對應的URL地址豫缨,也可能由相同的URL與不同的byte range指定。DASH客戶端可以通過HTTP協議來獲取URL對應的分片數據端朵。

Segments可以進一步劃分為更小的Subsegments好芭,Subsegments表示Segment中一些更小的access units。Segment index描述了Subsegments的presentation time range和byte position冲呢,客戶端可以先獲取Segment index舍败,再通過HTTP 1.1的byte range requests去請求相應的Subsegment。

Representation中會包含(且僅包含)這幾個選項之中的一個:
(1) 一個或多個SegmentList元素敬拓;
(2) 一個SegmentTemplate邻薯;
(3) 一個或多個BaseURL元素,最多一個SegmentBase元素乘凸,不含有SegmentTemplate或SegmentList元素厕诡。

(1) SegmentList

SegmentList包含了一個SegmentURL的列表,客戶端按照segment列表元素在MPD文件中出現的順序來請求和播放相應的Segments营勤。SegmentURL即為每個Segment的地址灵嫌,可以是絕對地址,也可以是相對地址葛作,也可能是字節(jié)范圍寿羞。看一個示例:


image.png

注:SegmentList duration表示每個Segment的目標長度為10S赂蠢,Initialization sourceURL中包含了該Representation的初始化信息绪穆。

(2) SegmentTemplate

SegmentTemplate提供了一種通過給定的模板構造出一個segment list的機制,這意味著一些特定的標識符將被動態(tài)值取代客年。在SegmentList模式中為每個Segment構造一個URL霞幅,當Representation中分段較多時,會使得MPD文件變得很大量瓜,而SegmentTemplate模式則可以通過少數幾行描述來構造出一系列segments司恳。有兩種形式的SegmentTemplate,一種是基于數字的SegmentTemplate绍傲,另一種是基于時間的SegmentTemplate扔傅。

基于數字的SegmentTemplate見如下示例:
image.png

上例中,通過“SegmentTemplate”元素中的地址和startNumber就可以構造出不同的segmentlist了烫饼,只需要短短幾行表述猎塞,使得MPD文件更加簡潔和緊湊。這種方式特別適用于含有多個Representations的長視頻杠纵,能夠有效壓縮MPD文件的大小荠耽,提升客戶端的下載速度和播放啟動速度。

基于時間的SegmentTemplate見如下例子:
image.png

“SegmentTimeline”字段中描述了當前Representation中第一個Segment的起始時間比藻,duration铝量,以及段的repeat次數倘屹。

(3) SegmentBase

在MPEG-DASH中,SegmentBase是當Representation中只有一個media segment存在時使用的方式慢叨。舉個例子


image.png

Representation內僅有一個Segment纽匙,BaseURL為http://cdn.bitmovin.net/bbb/video-1500k.mp4,SegmentBaseindexRange="0-834"表示SAP和其他初始化信息包含在開頭的834字節(jié)中拍谐。

MPD文件舉例

<?xml version="1.0"?>
<!-- MPD file Generated with GPAC version 0.7.2-DEV-rev452-g24e21d719-work  at 2018-04-17T08:38:52.245Z-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500S" type="static" mediaPresentationDuration="PT0H2M35.371S" maxSegmentDuration="PT0H0M7.000S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011">
 <ProgramInformation moreInformationURL="http://gpac.io">
  <Title>staging/dash-vod-single-segment/manifest-h264.mpd generated by GPAC</Title>
 </ProgramInformation>

 <BaseURL>service-location-0/</BaseURL>
 <BaseURL>service-location-1/</BaseURL>
 <Period duration="PT0H2M35.371S">
  <AdaptationSet segmentAlignment="true" lang="eng" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
   <Representation id="140" mimeType="audio/mp4" codecs="mp4a.40.2" startWithSAP="1" bandwidth="191063">
    <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
     <SegmentList>
      <SegmentURL media="audio.mp4"/>
     </SegmentList>
   </Representation>
  </AdaptationSet>
  <AdaptationSet segmentAlignment="true" maxWidth="1920" maxHeight="1080" maxFrameRate="30" par="16:9" lang="eng" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
   <Representation id="2" mimeType="video/mp4" codecs="avc1.4D401F" width="1280" height="720" frameRate="30" sar="1:1" startWithSAP="1" bandwidth="719635">
     <SegmentList>
      <SegmentURL media="video-avc-main-720.mp4"/>
     </SegmentList>
   </Representation>
   <Representation id="3" mimeType="video/mp4" codecs="avc1.4D4028" width="1920" height="1080" frameRate="30" sar="1:1" startWithSAP="1" bandwidth="1005252">
     <SegmentList>
      <SegmentURL media="video-avc-main-1080.mp4"/>
     </SegmentList>
   </Representation>
  </AdaptationSet>
 </Period>
</MPD>

備注:

在媒體播放過程中烛缔,雖然可以方便地在不同的碼率(Representations)之間,但并不能做到在碼流的任意點切換轩拨。需要注意的是践瓷,Segments之間不允許互相覆蓋(overlap),而且Segments之間是解碼獨立的气嫁,也就是每個Segments可以單獨解碼当窗,而不依賴其之前或之后的其他Segments,這就涉及到了Stream Access Point (SAP)的概念寸宵。SAP可以簡單理解為I幀或IDR幀崖面,一般每個Segments的起始幀都是IDR幀(H.264 / AVC),這樣就保證了每個Segments傳輸完成之后梯影,可以切換到其他的Representation巫员。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市甲棍,隨后出現的幾起案子简识,更是在濱河造成了極大的恐慌,老刑警劉巖感猛,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件七扰,死亡現場離奇詭異,居然都是意外死亡陪白,警方通過查閱死者的電腦和手機颈走,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來咱士,“玉大人立由,你說我怎么就攤上這事⌒蚶鳎” “怎么了锐膜?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弛房。 經常有香客問我道盏,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任捞奕,我火速辦了婚禮牺堰,結果婚禮上拄轻,老公的妹妹穿的比我還像新娘颅围。我一直安慰自己,他們只是感情好恨搓,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布院促。 她就那樣靜靜地躺著,像睡著了一般斧抱。 火紅的嫁衣襯著肌膚如雪常拓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天辉浦,我揣著相機與錄音弄抬,去河邊找鬼。 笑死宪郊,一個胖子當著我的面吹牛掂恕,可吹牛的內容都是我干的。 我是一名探鬼主播弛槐,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼懊亡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了乎串?” 一聲冷哼從身側響起店枣,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叹誉,沒想到半個月后鸯两,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡长豁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年钧唐,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕉斜。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡逾柿,死狀恐怖,靈堂內的尸體忽然破棺而出宅此,到底是詐尸還是另有隱情机错,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布父腕,位于F島的核電站弱匪,受9級特大地震影響馋吗,放射性物質發(fā)生泄漏学歧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望喧兄。 院中可真熱鬧,春花似錦甜无、人聲如沸撒璧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镀裤。三九已至,卻和暖如春缴饭,著一層夾襖步出監(jiān)牢的瞬間暑劝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工颗搂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留担猛,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓丢氢,卻偏偏與公主長得像傅联,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子卖丸,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容