音视频协议-MPEG-DASH
介绍
DASH是 Dynamic Adaptive Streaming over HTTP 的简称,是一种自适应码率流媒体技术。
MPEG-DASH 是一种基于HTTP的流媒体传输协议,负责将视频从HTTP服务器传输给终端用户。在 MPEG-DASH 中,一个视频被分割成许多切片,这一信息被一个MPD记录。该MPD首先被传输给播放器,播放器基于当前网络条件和缓冲情况,基于MPD信息来请求合适码率&分辨率的视频切片。
ABR是 Adaptive Bit-Rate streaming 的简称,是指为确保视频在互联网上的流畅传输,而根据带宽条件自适应地调节视频码率和质量的过程。
使用ABR技术后,视频被转码为多种分辨率和码率的组合,这种组合被称为 rendition,这些 rendition 的集合形成了码率阶梯(Bitrate Ladder)。
MPEG-DASH 支持TS和 MP4 / ISO BMFF媒体段。HLS只支持 MPEG-2 TS。DASH媒体段通常比HLS短,2至4秒比较常见。DASH不需要特定的编解码器。视频可以使用H264编码,也可以用其他编码,VP9和H265也是比较受欢迎的编码。
下面就是一个码率阶梯:
1080p 5.0 mbps2. 720p 4.0 mbps3. 640p 3.2 mbps4. 480p 2.0 mbps5. 270p 1 mbps
MPEG-DASH 工作流程

- 一组电影的编码(或码率-分辨率组合, 即
rendition)由MPEG-DASH打包服务或软件去打包,打包的过程是将每个rendition分割成指定时间的小片或小块(例如,2秒或4秒长)。 - 打包器还将其如何分割视频以及视频的交付顺序记录在一个称为MPD或清单(
manifest)的文本文件中。 - 打包过的视频和清单被存储在源站服务器,并等待被分发给播放器(通常使用CDN)。
在另一端,有一个兼容了MPEG-DASH的播放器,其中内置了ABR引擎。 - 当用户按下播放键,应用程序或者视频播放器请求视频的MPD文件,在收到MPD后,播放器对其进行解析然后理解如何播放视频。
- 播放器开始按照预定义顺序请求视频切片,解码它们并将视频显示给用户。
- 播放器持续监测带宽条件。根据可用带宽,播放器选择
MPEG-DASH MPD中描述的码率之一,并请求CDN从该变体(Variant)中发送下一个视频块。
整个过程会一直持续,直到视频播放结束(电影结束或者用户停止观看)。
MPEG-DASH的工作原理
- MPD文件描述了电影视频的切割、排序方式以及传输信息。
- 打包过的视频被存储在服务器上并通过CDN发送。
- 视频播放器首先下载MPD,然后需要理解视频传输机制,感知可用带宽,再开始播放。
- 根据缓冲大小和可用带宽,视频播放器请求该电影某个码率组合的视频切片。
- 通过不断感知带宽条件和缓冲水平,播放器自适应地传输内容,以提供良好的用户体验。
MPD内描述了两种类型(mimeType)的文件:video和audio,即视频和音频,每种类型又包括了一个*.mp4的视频头和一连串*.m4s视频。操作思路是先分别合并视频和音频的*.mp4+*.m4s,得到video.mp4和audio.mp4,最后再合并音频和视频。
创建MPEG-DASH视频流
如果你拥有一个单一的视频或者同一视频的几个码率-分辨率组合(rendition),你就可以创建与 MPEG-DASH 兼容的视频流。这个过程被称为打包,由专业的软件打包器完成。
目前市面上有多种打包器,其中最有名的包括:
- FFmpeg
- 谷歌的Shaka Packager
- GPAC的mp4box
- Bento4的mp4dash
它们都是由命令行驱动,最基本的操作就是在视频文件中指定打包器,并确认 DASH 参数(直播、点播、切片列表和切片时间线等),打包器将生成 DASH 兼容的视频流和 DASH MPD 文件。
MPEG-DASH特性
MPEG-DASH 拥有很多特性,这些特性对于视频服务提供商充满吸引力。让我们来看下这些特性:
MPEG-DASH获得了播放器公司的广泛支持,并由国际社区积极发展。持续的Bug修复、改进以及各种特性使得MPEG-DASH成为视频服务的最佳选择。MPEG-DASH同时支持点播和直播。- 获得了Android生态的支持,这对于在Android手机、电视以及其他设备上观看视频尤为重要。考虑到世界上很多人无法负担 IPhone 和 Apple TV 昂贵的价格,所以
MPEG-DASH会是HLS很好的替代。 MPEG-DASH对编解码器没有要求,可以很好地与H.264/AVC、AV1或其他Codec一起使用。MPEG-DASH同时支持MPEG-TS和fMP4容器格式。(审校者注:MPEG DASH最新版本和Fragmented MP4关联更紧密一些,它确实也在老版本的标准中支持了MPEG-TS。)MPEG-DASH支持广告插入(包括客户端和服务器端的广告插入)。
参考: