音视频协议-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 工作流程

f03f0511baeb020d9b4bb9364bf8ce76.png

  • 一组电影的编码(或码率-分辨率组合, 即 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.mp4audio.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/AVCAV1 或其他Codec一起使用。
  • MPEG-DASH 同时支持 MPEG-TSfMP4 容器格式。(审校者注:MPEG DASH 最新版本和 Fragmented MP4 关联更紧密一些,它确实也在老版本的标准中支持了 MPEG-TS。)
  • MPEG-DASH 支持广告插入(包括客户端和服务器端的广告插入)。

参考:

Easy Tech:什么是MPEG-DASH协议