前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器格式的乐趣 第三章:MPEG-TS和Matroska

容器格式的乐趣 第三章:MPEG-TS和Matroska

作者头像
用户1324186
发布2019-07-31 15:57:59
1.8K0
发布2019-07-31 15:57:59
举报
文章被收录于专栏:媒矿工厂媒矿工厂

本文为媒矿工厂编译的技术文章

原标题: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

  • http://www.digitalekabeltelevisie.nl/dvb_inspector/(GUI,开源)
  • http://thumb.co.il/(GUI / Web,开源)
  • http://dvbsnoop.sourceforge.net/(CLI,开源)
  • https://github.com/tsduck/tsduck(CLI,开源)

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/)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 媒矿工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档