项目记录:MPEG-DASH整理1

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的位置

  • MPD表用来描述媒体信息。

    如:

    1. 是直播还是点播
    2. 视频切片的大小
    3. 有几种不同的码率
    4. 每个视频片段对应的URL地址等
  • 客户端通过MPD文件就可以知道整个将要播放的媒体信息。

MPD的切片

  • 将视频在时域上进行切分

    将一段1080p,10s的视频切分成5种码率5个片段,每个片段2s的视频

    CUT

  • 可能的下载情况(由于网络状况等原因,可以下载不同分辨率,不同码率质量的视频),如下:

    image

MPD字段介绍

  • MPD(media presentation description)是一种XML文件,描述了视频的所有信息,在白皮书的Part1部分有详细的介绍。MPD通过不同的标签,层次化的描述媒体信息,层次结构可以见下图

    image

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表进行解析,根据网络的状态等,下载对应的视频流,保证视频流畅地播放。

参考文档

  1. wiki
  2. MPEG-DASH简介
  3. MPD相关领域知识总结
  4. MPD介绍
  5. MPD各字段介绍

猜你喜欢

转载自blog.csdn.net/qjh5606/article/details/84669161