音视频入门基础:MPEG2-TS专题(3)——TS Header简介

注:本文有部分内容引用了维基百科:https://zh.wikipedia.org/wiki/MPEG2-TS

一、引言

本文对MPEG2-TS格式的TS Header进行简介。

进行简介之前,请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的文档是免费的,ISO/IEC是付费的,所以我们主要阅读ITU提供的官方文档,比如较新版的《T-REC-H.222.0-202106-S!!PDF-E.pdf》。

《T-REC-H.222.0-202106-S!!PDF-E.pdf》总共有340页。本文下面所说的"页数"是指在pdf阅读器中显示的页数:

二、MPEG2-TS官方文档中的Mnemonics

《T-REC-H.222.0-202106-S!!PDF-E.pdf》第35到36页定义了Mnemonics(助记符),描述编码位流中使用的不同数据类型,即描述了MPEG2-TS格式中的每个属性分别占用多少空间:

其中:

bslbf(bit string,left bit first)表示比特串,左位在先。

uimsbf(unsigned integer,most significant bit first)表示无符号整数,高位在先。具体可以参考:《uimsbf和 bslbf的含义》。

三、transport stream

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第3页,MPEG2-TS官方文档中把MPEG2-TS传输流称为transport stream。所以MPEG2-TS传输流、transport stream、MPEG transport stream是同一个东西,只是叫法不同:

四、transport packet

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第48页,MPEG transport stream由一个个transport packet组成,使用sync_byte(Syncword,同步字节)分割各个transport packet(又称为TS包,TS分组、传输流报文)。transport packet长度固定为188字节:

虽然官方文档写着一个transport packet长度固定为188字节,但还有长度分别为192字节和204字节的TS格式。

1.普通的TS格式:一个transport packet长度固定为188字节。

2.日本标准的DVH-S格式:一个transport packet长度固定为192字节。

3.普通的TS格式之上加上了FEC前向纠错:一个transport packet长度固定为204字节。TS的底层传输机制可以为每个transport packet附加一些信息以便传输,例如前向纠错用的校验部分。DVB和ISDB数字电视制式的前向纠错信息有16个字节,而ATSC制式有20个字节。所以如果存在FEC前向纠错时,一个transport packet为204字节(在188字节的Packet后部加上16字节的FEC,188 + 16 = 204)。关于TS流包长的判断方法可以参考:《TS流包长的简单判断(188/204B)》。

五、TS Header

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第280页,一个transport packet = Header(TS Header) + Payload(载荷):

根据《T-REC-H.222.0-202106-S!!PDF-E.pdf》第48页,一个transport packet包含下图中所示部分。其中:sync_byte、transport_error_indicator、payload_unit_start_indicator、transport_priority、PID、transport_scrambling_control、adaptation_field_control、continuity_counter这些属性是每个transport packet都会包含的,所以一般把它们称作TS Header中的固定长度部分(或必选头)。除了固定长度部分,TS Header中还有可能包含可选部分,可选部分中包括adaptation_field(适配域),适配域有可选的扩展部分。

所以,TS Header = 固定长度部分(sync_byte、transport_error_indicator、payload_unit_start_indicator、transport_priority、PID、transport_scrambling_control、adaptation_field_control、continuity_counter) + adaptation_field(适配域):

TS Header中的固定长度部分总共占4个字节。因为sync_byte占8位(8位等于1个字节)、transport_error_indicator占1位、payload_unit_start_indicator占1位、transport_priority占1位、PID占13位、transport_scrambling_control占2位、adaptation_field_control占2位、continuity_counter占4位,这些属性加起来总共4个字节。

其中:

sync_byte:占8位,为同步字节。每个transport packet以固定的同步字节起始,这个同步字节的值必须为0x47:

transport_error_indicator:占1位,为传输错误指示位。发送时(调制前)值为0。接收方的解调器(demodulator)在无法成功解调(即使有前向纠错机制)transport packet内容时,将该位设置为1,表示该transport packet损坏:

payload_unit_start_indicator:占1位,为载荷单元开始指示位。负载单元起始标示符,一个完整的数据包开始时标记为1, 表示携带的是PSI或PES第一个包:

transport_priority:占1位,为传输优先级。值为1时,在相同PID的分组中具有更高的优先权:

PID:占13位,为分组ID。用于识别transport packet的ID。一个PID对应一种特定的PSI消息或者一个特定的PES:

transport_scrambling_control:占2位,传输加扰控制。

值为'00'时表示载荷未加密。其余值由具体系统定义。以DVB的CSA和ATSC的DCS为例:

'01' = 保留 (供未来使用),

'10' = 以偶数密钥加密

'11' = 以奇数密钥加密

adaptation_field_control:占2位,为适配域存在标志。

'00' = 保留 (供未来使用)

'01' = 无适配域,仅有载荷

'10' = 仅有适配域

'11' = 适配域和载荷都存在

continuity_counter:占4位,连续性计数器。取值为0x00到0x0F,循环。用于检查同一个PID的transport packet的连续性。每当一个transport packet中包含载荷时,该计数器加1:

相关推荐
darkdragonking1 小时前
FLV视频封装格式详解
音视频
元争栈道3 小时前
webview和H5来实现的android短视频(短剧)音视频播放依赖控件
android·音视频
元争栈道4 小时前
webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
android·音视频
MediaTea8 小时前
Pr:音频仪表
音视频
桃园码工8 小时前
13_HTML5 Audio(音频) --[HTML5 API 学习之旅]
音视频·html5·audio
cuijiecheng201814 小时前
音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现
ffmpeg·音视频
γ..15 小时前
基于MATLAB的图像增强
开发语言·深度学习·神经网络·学习·机器学习·matlab·音视频
cuijiecheng201815 小时前
音视频入门基础:AAC专题(13)——FFmpeg源码中,获取ADTS格式的AAC裸流音频信息的实现
ffmpeg·音视频·aac
悟纤18 小时前
Suno Api V4模型无水印开发「高清音频WAV下载」 —— 「Suno Api系列」第6篇
音视频·suno·suno v4·suno ai
gomogomono1 天前
HDR视频技术之八:色域映射
音视频·hdr·yuv