音视频入门基础: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:

相关推荐
日光明媚29 分钟前
SoulX-FlashTalk 技术报告解读:从“严格因果”到“双向流式蒸馏”,实时数字人为什么能做到 0.87s 延迟、32FPS 和长时稳定?
人工智能·python·深度学习·ai作画·aigc·音视频
线束线缆组件品替网1 小时前
Amphenol网线组件RJE1Y12305152401线束选型指南替代方案解析
服务器·数码相机·电脑·音视频·电视盒子·智能电视
天才小网管2 小时前
相机断电形成dat文件成功修复成视频的方法
数码相机·音视频
EasyGBS2 小时前
国标GB28181视频平台EasyGBS新增HLS按需切片:告别资源空转,让安防视频效率拉满!
网络·人工智能·音视频
AI2512243 小时前
AI文生视频技术解析:主流工具的模型架构与能力对比
人工智能·架构·音视频
lI-_-Il3 小时前
适配工具箱:手机里的全能数字瑞士军刀
android·音视频
Likeadust3 小时前
视频高清点播直播EasyDSS如何解锁文旅行业数字化传播新路径
音视频
byte轻骑兵3 小时前
【LE Audio】ASCS精讲[6]: 从配置到流传输 ASE控制全流程拆解
人工智能·音视频·蓝牙·le audio·低功耗音频
芷栀夏4 小时前
AI 视频生成器:一键输入主题,自动生成文案、素材、配音、字幕,7×24 小时无人值守
人工智能·音视频
美狐美颜sdk4 小时前
视频平台如何实现实时美颜?Android/iOS直播APP美颜SDK接入指南
android·前端·人工智能·ios·音视频·第三方美颜sdk·视频美颜sdk