当前位置: 首页 > article >正文

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


http://www.kler.cn/a/392066.html

相关文章:

  • jmeter常用配置元件介绍总结之定时器
  • ubuntu ros 解决建完图后 保存的地图非常小的问题
  • zabbix监控端界面时间与服务器时间不对应
  • python实战(八)——情感识别(多分类)
  • RS®SZM 倍频器
  • 使用electron-egg把vue项目在linux Ubuntu环境下打包并安装运行
  • 从零开始使用YOLOv11——Yolo检测detect数据集自建格式转换为模型训练格式:20w+图片1w+类别代码测试成功
  • PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)
  • 边缘计算与推理算力:智能时代的加速引擎
  • 开源大模型推理引擎现状及常见推理优化方法总结
  • ubontu安装anaconda
  • 简单理解回调函数
  • Jenkins配置步骤
  • Spring学习笔记_30——事务接口PlatformTransactionManager
  • 汽车牌照识别系统的设计与仿真(论文+源码)
  • Vue 组件间传值指南:Vue 组件通信的七种方法
  • 软考系统架构设计师论文:论多源数据集成及应用
  • 企业“3D官网”主要有哪些功能?
  • labview实现定时器的功能
  • ❤React-React 组件基础(类组件)
  • Redhat7.9 安装 KingbaseES 金仓数据库 V9单机版(命令行安装)
  • 【设计模式】单例设计模式
  • openresty入门教程:ngx.print ngx.say ngx.log
  • Java LeetCode练习
  • Unity3D
  • 八、Spring Boot集成Spring Security之前后分离认证最佳实现测试