MPEG2-TS

MPEG2-TS 传输串流（MPEG-2 Transport Stream；又称MPEG-TS、MTS、TS）是一种标准数字封装格式,用来传输和储存视讯、音讯与频道、节目信息，应用于数字电视广播系统，如DVB、ATSC、ISDB、IPTV等。

MPEG2-TS定义于MPEG-2第一部分：系统（即ISO/IEC标准13818-1或ITU-T Rec. H.222.0）。

MPEG2-TS面向的传输介质是地面和卫星等可靠性较低的传输介质，这一点与面向较可靠介质如DVD等的MPEG PS不同。

## 传输协议

<image>

1个TS（传输流）中封装了多个子TS。通常子TS是分组化基本流（PES, Packetized elementary stream）；分组化基本流中封装基本流（ES，Elementary Stream），或者非MPEG的编码流，例如AC-3、DTS音频流，MJPEG、JPEG 2000视频流、字幕所需要的文本和图像、用于定义基本流的表、乃至电视台定义的电子节目表（EPG）等。

一些相互独立的流可以被复用在一个TS里，例如几个不同的电视频道或者同一个电影的多个拍摄角度。

每个传输流被分割为大小最大为188字节的TS封包（TS Packet），它是多路复用（multiplexing）的基本单位。多个不同的ES（基本流）的内容会分别被封装到TSP中通过同一个TS传输。由于封包（分组）尺寸较小，复用对各个ES造成的时延也较低，对传输误码的耐受性也强于那些将一帧画面封装到一整个包里的容器格式，如MPEG PS和AVI、MOV/MP4、MKV等。这对于视频会议等对实时性要求高的场景特别有意义，因为单个分组损坏不会造成很大的语音延迟。

TS通常以固定码率传输。固定码率传输时，如果上层待传输内容不足，会发送空分组以占位。蓝光光碟中使用的MPEG-2 TS也使用了固定码率。

下表为MPEG-2 TS协议的一个实际应用的例子：日本地面数字电视ISDB-T。表中列举了TS、PES、ES层次上，ISDB-T这个具体的系统使用的具体标准。

MPEG-2 TS协议层次划分｜ISDB-T的协议栈

ES/Table｜MPEG-2 视频（H.262）（ISO/IEC 13818-2）｜MPEG-2 AAC（ISO/IEC 13818-7）｜数据服务（独立PES模式）（ARIB STD-B24）｜PSI/SI（ISO/IEC 13818-1、ARIB STD-B10）｜数据服务（数据与对象轮播模式）（ARIB STD-B24）

内容权利保护专用方式（加密）（ARIB STD-B25）

PES/Section｜MPEG-2 PES（ISO/IEC 13818-1、ARIB STD-B32）｜表的分节（Table Section）（ISO/IEC 13818-1、ARIB STD-B32）

TS｜MPEG-2 TS（ISO/IEC 13818-1）

## TS中的主要概念

### TS分组

TS分组（TS packet）是TS的基本传输单位。在TS范围以外并不存在描述一个TS的属性的全局性的描述体。TS自身的全部信息仅由其自身描述，TS仅由一系列的TS分组构成。

每个TS分组以固定的同步字起始，这个同步字节的值为0x47，它也是TS分组头的一部分。TS分组的必选头长度为4字节，其后为可选部分，为载荷或适配域。TS分组的头部固定以大端序读写。TS分组长度为188字节。

如同所有的传输协议一样，虽然TS分组本身长度为188字节，其底层传输机制可以为每个TS分组附加一些信息以便传输，例如前向纠错用的校验部分。DVB和ISDB数字电视制式的前向纠错信息有16个字节，而ATSC制式有20个字节。

### TS分组格式

TS分组包括头部和载荷两部分。头部包括固定长度部分和可选部分，可选部分中包括适配域。适配域有可选的扩展部分。

本节介绍TS分组头部中的固定部分和适配域（不包含适配域扩展部分）。

名称｜比特数｜描述

固定部分（4字节）｜同步字节｜sync byte｜8｜0x47

传输错误指示位｜Transport Error Indicator (TEI)｜1｜发送时（调制前）值为0。接收方的解调器在无法成功解调（即使有前向纠错机制）TS分组内容时，将该位设置为1，表示该TS分组损坏。

载荷单元开始指示位｜Payload Unit Start Indicator｜1｜负载单元起始标示符，一个完整的数据包开始时标记为1, 表示携带的是PSI或Packetized Elementary Stream第一个包

传输优先级｜Transport Priority｜1｜值为1时，在相同PID的分组中具有更高的优先权。

分组ID｜PID｜13｜用于识别TS分组的ID。一个PID对应一种特定的PSI消息或者一个特定的PES。

传输加扰控制｜Transport Scrambling control (TSC)｜2｜值为'00'时表示载荷未加密。其余值由具体系统定义。以DVB的通用扰码算法和ATSC的DCS为例：、'01' = 保留 (供未来使用),、'10' = 以偶数密钥加密、'11' = 以奇数密钥加密

适配域存在标志｜Adaptation field exist｜2｜、'00' = 保留 (供未来使用)、'01' = 无适配域，仅有载荷、'10' = 仅有适配域、'11' = 适配域和载荷都存在

连续性计数器｜Continuity counter｜4｜取值为0x00到0x0F，循环。用于检查同一个PID的TS分组的连续性。每当一个TS分组中包含载荷时，该计数器加1。

可选部分｜适配域｜Adaptation field｜0或更多｜当适配域存在标志为'10'或'11'时存在

载荷｜Payload Data｜0或更多｜当适配域存在标志为'01'或'11'时存在

#### 适配域

名称｜位元数｜描述

固定部分（2字节）｜适配域长度｜Adaptation Field Length｜8｜适配域的长度，单位为字节，不包含当前字节。

不连续指示位｜Discontinuity indicator｜1｜如果根据连续性计数器或PCR计算，确认当前分组处于不连续状态，则取值为1。

随机访问指示位｜Random Access indicator｜1｜如果当前分组是一个PES的起始，取值为1。

ES优先级指示位｜Elementary stream priority indicator｜1｜取值为1时ES优先级更高。

PCR标识｜PCR flag｜1｜1表示适配域中有PCR域

OPCR标识｜OPCR flag｜1｜1表示适配域中有OPCR域

接续点标识｜Splicing point flag｜1｜1表示适配域中有接续倒数计数器域

传输私有数据标识｜Transport private data flag｜1｜1表示适配域中有私有数据域

适配域扩展标识｜Adaptation field extension flag｜1｜1表示适配域中有适配域扩展域

可选部分｜PCR｜33+6+9｜Program Clock Reference。结构为33位的低精度部分+6位的填充部分+9位的高精度部分。具体说明参见PCR一节。

原PCR｜OPCR｜33+6+9｜Original PCR。格式与PCR相同。在TS复制时使用。

接续倒数计时器｜Splice countdown｜8｜指示从当前分组起多少个分组之后接续点出现（取值可为负）。

填充字节｜可变长度

### PID

每一种PSI表和每个ES都对应一个PID值，它是将TS解复用为ES和PSI表的依据。常见的实现中，多个PES在TS中以时分复用方式存在，故而各ES的PID会轮流出现。

### 节目

节目（Program）这个概念存在于TS中。每个节目在TS中对应一个节目映射表（PMT），不同的节目的PMT具有不同的PID。PMT中会指定与这个节目相关的所有ES的PID。

数字电视的一个TS中可能包含3个或更多的节目。假设每个节目包含1个视频ES，1到2个音频ES，以及一些对应的PSI、数据服务等，播放电视节目的设备并不需要解析所有节目的视频、音频流，只需要根据PID，选择相应的ES，解析并播放即可，与节目无关的PID对应的TS分组可以全部丢弃。

包含多个节目的TS称为多节目TS（MPTS），只包含1个节目的TS成为单节目TS（SPTS）。

### PSI

节目专用信息（PSI，Program Specific Information），描述特定节目相关的属性。MPEG-2标准规定了4种PSI：节目关联表（PAT，Program Association Table）、节目映射表（PMT，Program Map Table）、条件访问表（CAT，Conditional Access Table）以及网络信息表（NIT，Network Information Table）。其中MPEG-2标准规定了PAT和PMT的具体结构。

在基于MPEG-2 TS的一些系统，如地面数字电视DVB、ATSC、ISDB-T等扩展了MPEG2-TS，引入了服务信息（SI，Service Information）这一概念。SI是PSI的补充，在协议层次上与PSI相同。

#### PAT

PAT (PAT: Program Association Table)列出该TS内所有节目。其PID固定为0x0000。每个节目由一个16比特的字段program_number指定。每个program_number都有一个对应的PID，用来指定该节目的PMT。PAT中不包含节目信息时，program_number为0x0000，则应从NIT（PID为0x0010）获取节目信息。

#### PMT

PMT (PMT: Program Map Table)包含特定节目相关的信息，每一个节目有一个PMT。虽然MPEG-2协议标准允许多个PMT使用相同的PID，常见的系统中，如ATSC、SCTE中，不同的PMT有各自的PID。

PMT包含的信息有特定节目的program_number，以及该节目对应的所有ES的PID。此外还有可选的描述子用来提供整个MPEG-2系统的属性和特定ES的属性。

#### CAT

CAT (CAT: Conditional Access Table) 用于节目的加密与解密。CAT对应PID为0x0001。

#### NIT

NIT (NIT: Network Information Table 网络信息表)提供TS的相关信息，如频率、调制方式。在扫描所有频道的节目时，关键信息来自各频道的TS中的NIT。

### PCR

节目时钟参考（PCR，Program Clock Reference）使得解码后的内容可以正确地同步播放。最多每100ms，接收方会从TS分组的适配域中得到特定节目的PCR值，PCR的PID由该节目的PMT中的PCR_PID域指定。解码系统应当基于PCR生成高精度的系统校时时钟（System Timing Clock，STC），用于同步声音ES和视频ES的内容。STC是MPEG-2系统里校时的基准。例如，表示时间戳（Presentation timestamp，PTS）的值即是以PCR值为基准的偏移量。

PCR包括一个33比特的低精度部分（90kHz）和一个9比特的高精度部分（27MHz，取值为0-299）。PCR容许的最大抖动为+/-500ns。

### 空分组

空分组（null packet）存在于某些使用MPEG2-TS的系统中，例如地面数字电视系统ATSC和DVB，用于保证固定码率。在从ES复用到TS的过程中，如果ES的数据量不足用尽TS的比特率，则复用器模块会插入空分组。空分组使用保留的PID值0x1FFF。空分组的载荷没有意义，接收者应当丢弃。

## 数字电视以外的应用

### 数码摄像机

MPEG-2 TS原本的设计用途是数字电视广播，不过后来用在数码摄像机、录像机、播放机上。用于非广播类用途时，其TS分组格式有所不同：在分组上增加了4个字节长的时间码（Time Code），使分组长度变为192字节。时间码使得播放系统可以在允许随机读取的存储介质中快速找到特定时间点的视频内容。借助时间码也可以用来同步多个摄像机拍摄的内容。

JVC在基于硬盘存储的数字摄像机产品中将这种流称为MOD与TOD。

### 蓝光

以前述格式构成的流被蓝光光碟联盟称为“BDAV MPEG-2 transport stream”（字面意思为BDAV版本的MPEG2-TS），其文件扩展名为.m2ts，俗称M2TS流。蓝光的影碟以BDAV（Blu-ray Disc Movie）格式的BDMV容器存储音频、视频以及其他内容，用于BD-R和BD-RE等格式的录制中。由于蓝光的M2TS和标准的MPEG TS格式基本相同，其设备能够以非常小的延迟转录数字电视内容。由于MPEG-2 TS原本就是面向实时播放的格式，使得蓝光的内容可以简单地从流中截取任意一段，降低了视频剪辑的处理成本。此外，这种流格式也使得存储介质的物理损坏对内容的影响降到最小。

## 关联条目

- MPEG媒体传输（MPEG media transport, MMT）
- MPEG PS
- 节目专用信息（PSI）
- 分组化基本流（PES）
- 实时传输协议（RTP）
- 单向轻量封装（Unidirectional Lightweight Encapsulation，ULE）

## 外部链接

- ITU-T H.222.0 | ISO/IEC 13818-1系统标准文档
- 上述文档的最近免费公开版本（2015年1月）
- 解释TS分组、PES、几种PSI结构的资料
- MPEG-4系统FAQ

## 基本资料

- 日语原文：MPEG2 传输串流格式、Transport Stream
- 扩展名：.ts, .tsv, .tsa
- mime：video/MP2T
- 所有者：MPEG
- 发行日期：1995年
- 类型：视频文件格式（媒体流格式）
- 作为容器：音频、视频、数据
- 扩展为：M2TS, TOD
- 标准：ISO/IEC 13818-1, ITU-T Recommendation H.222.0