本文为媒矿工厂编译的技术文章
原标题:Fun with Container Formats – Part 3
作者:Armin Trattnig
翻译整理:陈晋进
之前的帖子翻译了Bitmovin博客上的《Fun with container formats》系列博文第一章(术语的介绍)和第二章(MP4与CMAF)。这个系列总共有三篇,分析四种最常见的容器格式及其重要性。本帖翻译第三章,将介绍MPEG-TS与Matroska这两种容器格式。
MPEG传输流(MPEG-TS)
在MPEG-2第1部分中制订了MPEG-TS的标准,专门用于数字视频广播(DVB)应用。MPEG节目流与其相对应的其他流相比,MPEG传输流是一种更适用于传输的格式,其目的是存储媒体并应用在例如DVD等实际应用之中。MPEG传输流由小的单个数据包组成,使用单个数据包的措施可以提升系统的稳定性,最大限度地减少丢包的影响。此外,该格式还使用了前向纠错(FEC)技术以允许校正接收器处的传输错误。MPEG-TS格式明确设计于有损信道视频流的传输。
复用:ES→PES→TS
基本流(ES)经编码器编码之后,首先加上一个信息头,组成为分组化基本流(PES)。此处的PES头部信息包括流标识符,PES分组长度和媒体时间戳信息等。接下来,PES被分成184个字节的块,并通过向每个块添加一个4字节的头而转换为传输流(TS)。由此得到的TS由固定长度为188字节的数据包组成。每个TS分组的头均携带相同的PID(即分组标识符),将每个分组与其对应的基本流相关联。
图1 ES→PES→TS
复用多个基本流
一般来说,一个基本流单独表示一份音频内容或视频内容。对于视频基本流而言,其通常还有额外的至少一个音频基本流。相关联的基本流会被复用到相同的传输流中,传输流中亦存在用于不同ES及其分组的单独的PID。
图2 复用多个基本流
复用多个节目
MPEG-TS具有节目(program)的概念。每个节目基本上是一组属于一起的相关基本流,例如视频和其对应音频。单个传输流可以携带多个节目,就像不同的电视频道那样。
图3 复用多个节目
一个传输流中不同节目的关联
从底层视角看来,传输流只是188字节长TS数据包的序列。如前所述,每个传输流中可以有许多节目,每个节目均具有多个基本流,但是客户端通常一次只能呈现一个节目。因此,客户端应当知道在接收传输流时要采用哪些数据包,又要丢弃哪些数据包。为此,MPEG-TS中设计了两种特殊的数据包:
1. 节目关联表(PAT):PAT数据包的PID是保留的PID 0,它包含了传输流中的所有节目的PMT的PID。
2. 节目映射表(PMT):一个PMT表示一个节目,并包含这个节目中的所有基本流的PID
图4 一个传输流中不同节目的关联
客户端使用PAT与PMT确定单一节目的步骤如下:
1. 检查TS数据包,从PID 0中获取PAT
2. 从PAT中找到播放器应播放的节目的PMT-PID(在图中的示例为200)
3. 获取具有相关PMT-PID的TS数据包,其中包含PMT(示例中为PID 200)
4. PMT包含所有媒体轨道的PID,这就是要播放的节目的一部分
接收传输流的客户端,首先读取它接收的第一个PAT数据包,并根据用户的选择选择要呈现的节目。从PAT中客户端得到所选节目的PMT,从而获得节目的基本流及其PID。之后,客户端将仅过滤这些PID,每个PID代表所选节目的一个ES,再对选择的ES进行解复用,解码最终讲视频内容呈现给用户。
OTT场景下的处理
OTT的数据内容基本以广播(broadcast)方式传播,因此OTT中的视频传输需要考虑到更多的条件。OTT客户端的网络连接往往不稳定,带宽也没有保障,使得OTT客户端应该只加载用户想要的内容。客户端一次只能呈现以个节目,而同时下载同一传输流所具有的多个节目及其浪费带宽,此外,通过质量适应等方法也能够更有效利用带宽。因此在OTT场景下,一个传输流中不应有多个节目。
MPEG-TS仍然广泛用于OTT,尤其是在Apple生态圈之中。
MPEG-TS与fMP4相比,其缺点是由于数据包大小较小,所有数据包报头的额外开销比较大。
图5 muxing overhead
MPEG-TS是面向传输的数据格式,并且考虑了有损信道,这对于基于HTTP的媒体传输来说并不完全适合,因为HTTP中传输损耗已经由网络堆栈处理。
调试MPEG-TS
Matroska(Webm)
概述
Matroska是一种免费的开放标准容器格式。它基于可扩展二进制元语言(EBML),它基本上是二进制形式的XML,因此其标准易于扩展。它还能够虚拟地(virtually)支持任何编解码器。
WebM
WebM是一种基于Matroska的容器格式,由谷歌推动开发,是在网页中使用的替代MP4和MPEG2-TS的免费开源的格式。它也支持谷歌的开源和免费的编解码器,如:视频的VP8,VP9编解码器和音频的Opus和Vorbis编解码器。使用带有DASH的WebM也可以实现通过Web流式传输VP9和Opus的视频。
调试Matroska / Webm
调试和查看Matroska或WebM文件内容的最佳工具是mkvinfo(https://mkvtoolnix.download/)。