简单大方网站,外链查询工具,网站建设编写代码问题,网站建设的风格注#xff1a;本文有部分内容引用了维基百科#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言
本文对MPEG2-TS格式的TS Header进行简介。
进行简介之前#xff0c;请各位先下载MPEG2-TS的官方文档。ITU-T和ISO/IEC都分别提供MPEG2-TS的官方文档。但是ITU提供的…注本文有部分内容引用了维基百科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格式中的每个属性分别占用多少空间 其中
bslbfbit stringleft bit first表示比特串左位在先。
uimsbfunsigned integermost 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_byteSyncword同步字节分割各个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 HeaderTS 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