MPEG-DASH整理1
1.DASH介绍
-
基于HTTP的动态自适应流(英语:Dynamic Adaptive Streaming over HTTP,缩写DASH,也称MPEG-DASH)是一种自适应比特率流技术,使高质量流媒体可以通过传统的HTTP网络服务器以互联网传递。
-
DASH是一种新的视频传输协议,不关心音频/视频的编解码器。
-
类似苹果公司的HTTP Live Streaming(HLS)方案,MPEG-DASH会将内容分解成一系列小型的基于HTTP的文件片段,每个片段包含很短长度的可播放内容,而内容总长度可能长达数小时(例如电影或体育赛事直播)。
-
DASH将媒体文件切分成小的视频片段,每个小的片段都编码成几种不同的码率,甚至会存在不同的分辨率,以满足不同客户端的网络需求。 比如,DASH可以根据当前的网络状况,来下载合适的码率的视频片段,从而避免停顿或重新缓冲。
2. DASH系统的基本结构
- DASH整个系统可以分成服务器和客户端两个模块
服务器
- 媒体文件(多媒体文件通常有一种或多种表示(即不同分辨率或比特率版本
- MPD表
MPD(media presentation description )
- Media Presentation Description是描述分片和时序的信息
-
MPD表用来描述媒体信息。
如:
- 是直播还是点播
- 视频切片的大小
- 有几种不同的码率
- 每个视频片段对应的URL地址等
-
客户端通过MPD文件就可以知道整个将要播放的媒体信息。
MPD的切片
-
将视频在时域上进行切分
将一段1080p,10s的视频切分成5种码率5个片段,每个片段2s的视频
-
可能的下载情况(由于网络状况等原因,可以下载不同分辨率,不同码率质量的视频),如下:
MPD字段介绍
-
MPD(media presentation description)是一种XML文件,描述了视频的所有信息,在白皮书的Part1部分有详细的介绍。MPD通过不同的标签,层次化的描述媒体信息,层次结构可以见下图
Period
- 一条完整的mpeg dash码流可能由一个或多个Period构成
- 每个Period代表某一个时间段
- 同一个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的编码格式,在切换时可以忽略之。
Segment
-
每个Representation由一个或者多个segment组成 ;
-
每个Representation由一个或者多个segment组成,只由一个segment组成的形式不能应用于网络直播。
-
每个segment由一个对应的URL指定,也可能由相同的URL+不同的byte range指定。dash 客户端可以通过HTTP协议来获取URL(+byte range)对应的分片数据。
-
Representation的Segments一般都采用1个Init Segment+多个普通Segment的方式 :
**Initialization Segment **
Init Segment中包含了解封装需要的全部信息,比如Representation中有哪些音视频流,各自的编码格式及参数。
MPD表代码
<!--
MPD file Generated with GPAC version 0.5.1-DEV-rev5379 on 2014-09-13T02:57:14Z
-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H12M14.17S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
<Title>
dashed/TearsOfSteel_4s_simple_2014_05_09.mpd generated by GPAC
</Title>
</ProgramInformation>
<Period duration="PT0H12M14.17S">
<AdaptationSet segmentAlignment="true" maxWidth="1920" maxHeight="1080" maxFrameRate="24" par="16:9">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<SegmentTemplate timescale="24000" media="tos_$Bandwidth$bps/TearsOfSteel_4s_$Number$.m4s" startNumber="1" duration="96000" initialization="tos_$Bandwidth$bps/TearsOfSteel_4s__init.mp4"/>
<Representation id="1920x1080 10.0Mbps" mimeType="video/mp4" codecs="avc1.4d4029" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="10045361"/>
<Representation id="1920x1080 6.0Mbps" mimeType="video/mp4" codecs="avc1.4d4028" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="6025488"/>
<Representation id="1920x1080 4.0Mbps" mimeType="video/mp4" codecs="avc1.4d4028" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="4011653"/>
<Representation id="1920x1080 3.0Mbps" mimeType="video/mp4" codecs="avc1.4d4028" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="3004351"/>
<Representation id="1280x720 2.4Mbps" mimeType="video/mp4" codecs="avc1.4d401f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="2416099"/>
<Representation id="1280x720 1.5Mbps" mimeType="video/mp4" codecs="avc1.4d401f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="1506971"/>
<Representation id="640x360 807.0kbps" mimeType="video/mp4" codecs="avc1.4d401e" width="640" height="360" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="807450"/>
<Representation id="640x360 505.0kbps" mimeType="video/mp4" codecs="avc1.4d401e" width="640" height="360" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="504741"/>
<Representation id="480x270 253.0kbps" mimeType="video/mp4" codecs="avc1.4d4015" width="480" height="270" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="253270"/>
</AdaptationSet>
<AdaptationSet segmentAlignment="true" bitstreamSwitching="true">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<SegmentTemplate timescale="48000" media="tos_$Bandwidth$bps/TearsOfSteel_4s_$Number$.m4s" startNumber="1" duration="191472" initialization="TearsOfSteel_4s_simple_2014_05_09_set2_init.mp4"/>
<Representation id="audio 48000kHz 66.0kbps" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="65509"/>
<Representation id="audio 48000kHz 130.0kbps" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="129510"/>
<Representation id="audio 48000kHz 192.0kbps" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="191511"/>
</AdaptationSet>
<AdaptationSet segmentAlignment="true" lang="eng">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle"/>
<SegmentTemplate timescale="1000" media="tos_$Bandwidth$bps/TearsOfSteel_4s_$Number$.m4s" startNumber="1" duration="4000" initialization="tos_$Bandwidth$bps/TearsOfSteel_4s__init.mp4"/>
<Representation id="subtitles" mimeType="video/mp4" codecs="wvtt" startWithSAP="1" bandwidth="101"/>
</AdaptationSet>
</Period>
</MPD>
客户端
- 客户端通常就是一个播放器。
- 通过对下载到的MPD表进行解析,根据网络的状态等,下载对应的视频流,保证视频流畅地播放。