网络流媒体协议之——MPEG-DASH协议简述

最近又把MPEG-DASH协议大概看了一下,本篇算是一篇学习笔记,主要参考下面这篇英文文档:

https://bitmovin.com/dynamic-adaptive-streaming-http-mpeg-dash/


DASH(Dynamic Adaptive Streaming over HTTP)是在2011年底由MPEG和ISO共同制定的标准,通过HTTP共同影音档案通讯协定,可使高品质影音内容通过网路传送到联网电视、机顶盒及移动终端设备。在MPEG-DASH之前,市场上已有Apple的HLS、Microsoft的Smooth Streaming以及Adobe的Dynamic Streaming等渐进式流媒体协议,但彼此并不相容,MPEG-DASH整合了这三种流媒体协议,同时支持TS profile和ISO profile,更具通用性。


MPEG-DASH的形成历史可以参见下图:




目前,MPEG-DASH已经被越来越多的应用在互联网上,随着一些有影响力的大公司如Netflix、YouTube和Google等的加入,加速了MPEG-DASH协议的部署。有了这些主要的互联网流量来源,MPEG-DASH已经占据了网络流媒体总流量的半壁江山。


DASH自适应码率下载工作示意图如下,首先,HTTP Server端将媒体文件切分成一个个时间长度相等的小分片(Segments),每个分片被编码为不同的码率和分辨率;这些分片可以通过GET请求下载,客户端通过评估自身的性能和带宽情况,下载相应码率和分辨率的切片。码率切换以Segment为单位,当自身带宽较好时,在下载下一个切片时,就可以请求对应码率的较高分辨率的切片;而当带宽变差时,则当前切片下载完成后,可以下载码率和分辨率较低的下一个切片。由于不同质量的切片在时间上都是对齐的,因此,在不同质量的切片之间切换时,是自然流畅的。





为了描述Segments之间在时间和结构上的关系,MPEG-DASH引入了Media Presentation Description (MPD)的概念。MPD是一个XML文件,它完整表示了视频的所有信息,包括视频长度,不同Segments的码率和分辨率、分片时长以及对应的URL等等,客户端通过首先下载并解析MPD文件,可获取到与自身性能和带宽最匹配的切片序列。下图比较清晰地说明了MPEG-DASH的工作机制以及MPD文件的作用。




下面我们来着重介绍一下MPD文件,MPD文件的结构大概如下图所示:




Periods


一个MPD文件可以包含一个或多个Periods,每个Period代表某一个时间段,比如某条码流有60s长,Period1为0~15s,Period2为16~40s,Period3为41~60s。在同一个Period内,可用的媒体内容及其各个可用码率(Representation)不会发生变更。直播情况下,可能需要周期性地去服务器请求新的MPD文件,服务器可能会移除已过时的Period,添加新的Period,而新的Period中可能会添加新的可用码率,或去掉上一个Period中存在的某些码率。


AdaptationSet


一个Period由一个或多个AdaptationSets组成,AdaptationSet包含了逻辑一致的媒体呈现的格式,例如,相同的codec、language、resolution,以及音频通道数(5.1,stereo等)的媒体内容可以组成一个AdaptationSet。每个AdaptationSet由一组可供切换的不同码率的码流(Representation)组成,这些码流中可能包含一个(ISO profile)或多个(TS profile)media content components,因为ISO profile的mp4或fmp4 segment中通常只含有一个视频或者音频内容,而TS profile中的TS segment同时含有视频和音频内容,当同时含有多个media component content时,每个被复用的media contentcomponent将被单独描述。


Representation


一个AdaptationSet由一组媒体内容版本可切换的Representations构成。每个Representation包含了相同媒体内容的不同版本,即不同的分辨率、码率等,以供客户端根据自身的网络条件和性能限制来选择合适的版本下载播放。


Segment


每个Representation中的内容都被切分成一段段Segments,使得客户端在播放时能够方便在不同的Representations之间切换。每个Segment由一个对应的URL指定,也可能由相同的URL与不同的byte range指定。DASH客户端可以通过HTTP协议来获取URL对应的分片数据。MPD中描述Segment URL的形式包括Segment list,Segment template,Single segment。


Subsegment


Segments可以进一步划分为更小的Subsegments,Subsegments表示Segment中一些更小的access units。Segment index描述了Subsegments的presentation time range和byte position,客户端可以先获取Segment index,再通过HTTP 1.1的byte range requests去请求相应的Subsegment。


在媒体播放过程中,虽然可以方便地在不同的码率(Representations)之间,但并不能做到在码流的任意点切换。需要注意的是,Segments之间不允许互相覆盖(overlap),而且Segments之间是解码独立的,也就是每个Segments可以单独解码,而不依赖其之前或之后的其他Segments,这就涉及到了Stream Access Point (SAP)的概念。SAP可以简单理解为I帧或IDR帧,一般每个Segments的起始帧都是IDR帧(H.264 / AVC),这样就保证了每个Segments传输完成之后,可以切换到其他的Representation。


下面我们对Segment URL的几种形式做一些必要的说明。


Representation中会包含(且仅包含)这几个选项之中的一个:(1) 一个或多个SegmentList元素;(2) 一个SegmentTemplate;(3) 一个或多个BaseURL元素,最多一个SegmentBase元素,不含有SegmentTemplate或SegmentList元素。下面我们分别来描述这三个元素。


(1) SegmentList


SegmentList包含了一个SegmentURL的列表,客户端按照segment列表元素在MPD文件中出现的顺序来请求和播放相应的Segments。SegmentURL即为每个Segment的地址,可以是绝对地址,也可以是相对地址,也可能是字节范围。看一个示例:




上例中,SegmentListduration表示每个Segment的目标长度为10S,Initialization sourceURL中包含了该Representation的初始化信息。


(2) SegmentTemplate


SegmentTemplate提供了一种通过给定的模板构造出一个segment list的机制,这意味着一些特定的标识符将被动态值取代。在SegmentList模式中为每个Segment构造一个URL,当Representation中分段较多时,会使得MPD文件变得很大,而SegmentTemplate模式则可以通过少数几行描述来构造出一系列segments。有两种形式的SegmentTemplate,一种是基于数字的SegmentTemplate,另一种是基于时间的SegmentTemplate。


基于数字的SegmentTemplate见如下示例:




上例中,通过“SegmentTemplate”元素中的地址和startNumber就可以构造出不同的segmentlist了,只需要短短几行表述,使得MPD文件更加简洁和紧凑。这种方式特别适用于含有多个Representations的长视频,能够有效压缩MPD文件的大小,提升客户端的下载速度和播放启动速度。


基于时间的SegmentTemplate见如下例子:




“SegmentTimeline”字段中描述了当前Representation中第一个Segment的起始时间,duration,以及段的repeat次数(个人理解,应该是具有相同duration的segments的个数,这样读取完一个Segment之后,就可以根据该数值直接去读取下一个Segment,而不需要重新去读取一遍MPD)。


(3) SegmentBase


在MPEG-DASH中,SegmentBase是当Representation中只有一个media segment存在时使用的方式。举个例子:




上例中,Representation内仅有一个Segment,BaseURL为http://cdn.bitmovin.net/bbb/video-1500k.mp4,SegmentBaseindexRange="0-834"表示SAP和其他初始化信息包含在开头的834字节中。


有了以上的概念,我们来最后看一个完整的MPD文件,由于内容较多,其中隐藏了部分内容,但保留了整个MPD文件的结构。








  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
内容由媒体协议等基本知识,视频媒体基本知识,媒体服务器搭建实战,媒体工具使用实战等内容组成。由本人“天地会珠海分舵”(http://blog.csdn.net/zhubaitian)耗时一个月整理而成,现分享给大家。 章节内容分布如下: 第1章Streaming 协议和服务器概览学习摘录 7 1.1 Protocol support 8 1.2 Media Container format support 12 第2章Streaming 协议学习摘录 15 2.1 MMS协议简介 15 2.2 RTP相关协议简介 15 2.2.1 RTP与RTCP协议简介 15 2.2.2 RTSP协议简介 16 2.2.3 传输过程 17 2.3 RTMP vs RTMFP 18 2.3.1 RTMP协议简介 18 2.3.3 RTMFP 简介 19 2.3.4 RTMP VS RTMFP 20 2.4 MPEG-TS 20 2.4.1 MPEG2-TS与MPEG2-PS的区别 20 2.4.2 PES/ES/TS简介 20 2.5 Smooth Streaming 21 2.5 HLS简介 24 2.6 MPEG-DASH 26 2.6.1 简介 26 2.6.2 Dash播放器列表 28 2.6.3 MPD格式 30 2.6.5 MPD在线检查器 31 2.6.5 MPD 格式理解个人小结 31 2.6.6 PMD格式的多样性 32 2.6.7 MPD 支持的Profiles 44 2.6.8 DASH传输协议支持 44 2.7 HLS VS MPEG-DASH 45 2.8 Real Data Transport Protocol 45 2.9 webM 45 第3章 视频容器格式学习摘录 47 3.1 视频容器VS 视频编码 47 3.2 3GP容器 48 3.2 AVI容器(.avi) 49 3.3 WMV vs ASF 容器(.wmv/.asf) 49 3.3.1 ASF高级串格式简介以及和WMA/WMV的区别 49 3.3.2 ASF和WMA/WMV的区别官方解析 50 3.4 QuickTime容器(.mov) 50 3.5 Ogg vs Ogm容器(.ogg) 51 3.5.1 Ogg容器格式 51 3.5.2 Ogm 51 3.5.3 Ogg vs Ogm 52 3.6 Matroska容器(.mkv|.mka|.mks) 52 3.7 MP4容器 53 3.7.1 简介 53 3.7.2 MP4格式详解 53 3.8 MPEGE TS容器 61 3.9 FLV容器 62 3.10 ABS – Adaptive Bitrate Streaming 自适应串容器 62 3.11 码率 63 3.12 媒体的3种格式 63 3.12.1 压缩媒体文件格式 63 3.12.2 文件格式 64 3.12.3 媒体发布格式 64 第4章 视频编码格式学习摘录 66 4.1视频编码格式简介 66 4.2主视频编码格式比较 67 4.2.1 MPEG编码格式 67 4.2.2 DivX/XviD编码格式 68 4.2.3 H.264/X264编码格式 69 4.2.4 WMA-HD/VC-1编码格式 71 4.2.5 各主编码格式比较 72 4.3 视频解码 73 第5章ffmpeg学习摘录 74 5.1 简介 74 5.2 功能 74 5.3 支持的格式和编码 75 5.4 支持的媒体协议 76 5.5 ffmpeg视频解码架构示例简略 76 5.5.1 解复用(Demux) 77 5.5.2 解码 (Decode) 78 5.5.3 Ffmpeg中解码程对应的API函数 78 第6章GStreamer学习摘录 80 6.1 GStreamer简介 80 6.2 GStreamer编写MP3播放器实例 80 6.2.1 初始化GStreamer 80 6.2.2 创建GStreamer管道元件 81 6.2.3 创建元件三元组之GStreamer数据源 81 6.2.4 创建元件三元组之解码器 (即GStreamer过滤器) 插件 81 6.2.5 创建元件三元组之GStreamer接收器 81 6.2.6 链接GStreamer元件三元组到管道 – 播放 82 6.2.7 启动GStreamer管道数据处理程 82 6.2.8 MP3命令行播放器源代码完整实例 82 第7章 ffmpeg VS GStreamer比较学习摘录 85 7.1 Pipeline设计模式简介 85 7.2 ffmpeg vs GStreamer 86 7.2.1 网上解析翻译 86 7.2.1 FFmpeg和GStreamer异同小结 87 第8章 媒体服务器搭建摘录 88 8.1 VLC 88 8.1.1 VLC编码和容器兼容性 88 8.1.1 VLC 配置VOD点播 88 8.1.2 VLC 配置组播服务器 90 8.2 Wowza Streaming Engine 91 8.2.1 简介及安装 91 8.2.2 MPEG-DASH 支持 92 8.2.3 如何使用VLC作为直播源 95 8.2.4 点播VOD配置 112 8.3 Nex Gen Media Server (NGMS) 114 8.3.1 Introduction 114 8.3.2 Feature List 115 8.3.3 Practice in Action 116 8.4 IIS Smooth Streaming(IIS Media Service) 117 8.4.1 Getting Started with IIS Smooth Streaming 117 8.4.2 Use VLC to play the Smooth Stream 128 8.4.3 创建Smooth Stream 文件 129 8.4.4 提供DASH服务时IIS的关键设置 129 8.4.5 Dash on IIS步骤 130 第9章 相关工具学习摘录 137 9.1 Bento4 MP4工具包 137 9.1.1 Introduction 137 9.1.2 所包含的工具简介 138 9.1.3 MPEG DASH Adaptive Streaming 139 9.1.4 Serving DASH Streams 147 9.2 MP4Box 149 9.2.1 简介 149 9.2.2 对DASH的支持命令帮助 150 9.2.3 MP4Box: fragmentation, segmentation, splitting and interleaving 153 9.2.4 把MP4转换成TS 155 9.2.5生成不同profile的MPD 155 9.2.6指定每个Representation的bandwidth 156 9.2.7生成多个period的MPD 156 9.2.8生成多个Representation的MPD 156 9.2.9 生成多个Segment的MPD 156 9.2.10 生成(Subsegment) SegmentBase拥有 indexRangeExact 为true的MPD 157 9.2.11 生成多个AdaptionSet的MPD 158 9.2.12 模拟live直播 158 第10章 媒体服务器搭建指导 159 10.1 所需搭建服务器Matrix 159 第11章 附录 163 11.1 Wowza支持格式 163 11.2 ISO Base Media File Format (IBMFF) 163 11.3 DASH所支持Profile分类 164

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值