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

音视频入门基础: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字节,但其底层传输机制可以为每个transport packet附加一些信息以便传输,例如前向纠错用的校验部分。DVB和ISDB数字电视制式的前向纠错信息有16个字节,而ATSC制式有20个字节,也就是说,如果存在错误校验,比如CRC校验时,一个transport packet为204字节(在188字节的Packet后部加上16字节的错误校验数据,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.lryc.cn/news/483093.html

相关文章:

  • Sam Altman:年底将有重磅更新,但不是GPT-5!
  • 基于物联网的智能超市快速结算系统
  • 241111.学习日志——[CSDIY] Cpp零基础速成 [00]
  • 湘潭大学软件工程算法设计与分析实验-模拟退火算法
  • Three.js 零基础+概念理解
  • c#使用COM接口设置excel单元格宽高匹配图片,如何计算?
  • Excel模板下载\数据导出
  • Vite初始化Vue3+Typescrpt项目
  • 深入剖析【C++继承】:单一继承与多重继承的策略与实践,解锁代码复用和多态的编程精髓,迈向高级C++编程之旅
  • 地级市能源消耗数据(2006至2021)含原始数据、计算过程、计算结果-最新出炉
  • MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并
  • AutoSAR CP DoIP规范导读
  • Window下PHP安装最新sg11(php5.3-php8.3)
  • 2024华为OD机试真题---中文分词模拟器
  • Kubernetes网络揭秘:从DNS到核心概念,一站式综述
  • C#封装EPPlus库为Excel导出工具
  • 【LeetCode】【算法】461. 汉明距离
  • Docker Compose部署Rabbitmq(延迟插件已下载)
  • 生信技能62 - 常用机器学习算法的R语言实现
  • 【3D Slicer】的小白入门使用指南二
  • 部署搭建AI相关项目时,不用魔法也能轻松自动下载所需大模型
  • zookeeper之节点基本操作
  • 技术最好 ≠ 最适合:数字化转型切忌盲目追求最先进的技术
  • 数字IC后端教程之Innovus hold violation几大典型问题
  • rust并发
  • 力扣 最小路径和
  • Scala中的可变Map操作:简单易懂指南 #Scala Map #Scala
  • 【go从零单排】XML序列化和反序列化
  • 在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5
  • 在 Ubuntu 上安装 `.deb` 软件包有几种方法