TS流分析-PES包头实例分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TS流分析-PES包头实例分析相关的知识,希望对你有一定的参考价值。




下面的字节是从ts文件中读取的一个ts包。并包含有PES头。





负载单元开始标志 附加区域控制 知道。



负载单元开始标志:第二个字节的第二位知道: 负载单元开始标志,1:含有PES数据时,该包为其开始。



附加区域控制:第四个字节,第3、4位  附加区域控制,后面是否有自适应字段和有效载荷 





47 40 45 30 07 10 87 14 3E 61 FE 00 00 00 01  E0 35 93  80 C0  0A 39  38 A7  06 75 19  38 A7 06 



75 00 00 00 01 09 10 00 00 00 01 67 4D 40 29 E9 80 A0 0B 76 02 20 00 01 F4 80 00 EA 9C 13 



E3 86 27 00 00 00 01 68 FE 32 48 00 00 00 01 06 00 01 C0 80 00 00 00 01 06 01 01 04 80 00 



00 00 01 41 88 80 10 6F F3 83 62 ED 5F 32 BE 03 FF 74 45 7C A3 FE 0F 76 3C A8 BE 65 8A BD 



CC 00 00 03 00 00 03 00 00 03 00 00 03 00 0D 75 34 BA 90 F1 6E D2 E3 F4 00 00 03 00 00 03 



00 76 00 01 0C 00 3B E5 09 40 85 3F 56 42 87 23 D5 14 2B 4A A7 7C 39 5C 15 A6 A6 A2 D0 C3 



BC 24 98 96 27 27 13 B0 




47 40 45 30 07 10 87 14 3E 61 FE 00 TS包头及自适应字段


00 00 01 E0 这四个四节叫做PES包的开始字节


E0   二进制 1110 0000 流类型 : H264  ISO/IEC 13818-3  或 ISO/IEC 11172-3  或 ISO/IEC 13818-7  或 ISO/IEC 14496-3  音 频流编号 x xxxx  


35 93  PES长度 0x 35 0x93 = 13715个字节,这说明这个PES包的长度是13715,需要好些ts包才能分割完。


80  = 10 00 0 0 0 0 =   10(固定值) 00PES_scrambling_control 0PES_priority 0 data_alignment_indicator  0copyright  0original_or_copy 



data_alignment_indicator  :0  包头后没有填充


C0 11 PTS_DTS_flags   0 ESCR_flag  0 ES_rate_flag 0 DSM_trick_mode_flag  0 additional_copy_info_flag  0 PES_CRC_flag  0 PES_extension_flag 说明既有PTS又有DTS


0A  PES_header_data_length 10字节,由任选字节(也就是下面的扩展域)和任意填充字节构成的长度。




39 = 0011 1001 = 0011(固定值)100(PTS[32-30]) 1 标记位,赋值1


38 A7 = 00 11 1000 1010 0111 = 111000101001(PTS[29-15])1 标记位 赋值1 意义不明


06 75 =  0000 0 110 0111 0101 =  0000 0110 0111 010(PTS[14-0]) 1 标记位 赋值1 PTS = 4532568890


19  =  000 1 1001  = 0001(固定值)100(TDS[32-30])1 标记位,赋值1 100 0011 1000 1010 0110000  0110 0111 010


38 A7 = 00 11 1000 1010 0111 = 0011 1000 1010 011(TDS[29-15])1 标记位,赋值1


06 75 = 0000  0 110 0111 0101 = 0000  0110 0111 010(TDS[14-0]) 1 标记位,赋值1 DTS = 4532568890


19 38 A7 06 75 这几个应该是任意填充字节。




负载的是h264视频数据,这是从节目映射表PMT中知道的。






附,



1. Wiki 对PES包头的定义


​https://en.wikipedia.org/wiki/Packetized_elementary_stream​​      




2. 图解

参考博客​​javascript:void(0)​​




3. PES中扩展头部的判断



根据流类型判断(流类型是PES包头第四字节),扩展头部有三种。



一种是非 (0xBC 0XBE  0xBF 0xF0 0xF1 0xF2 0xF8),这类可能又PTS/DTS信息


一种是(0xBC  0xBF 0xF0 0xF1 0xF2 0xF8)其中之一。


一种是 0XBE,也就是padding_stream 。



第一种


1011 1100  1  program_stream_map     0xBC



1011 1110  padding_stream                  0XBE



1011 1111  3  private_stream_2              0xBF



1111 0000  3  ECM_stream                     0xF0



1111 0001  3  EMM_stream                    0xF1



1111 1111  4  program_stream_directory 0xFF



1111 0010  5  ITU-T H.222.0 建议书 | ISO/IEC 13818-1  附件 A 或 ISO/IEC 13818-6_DSMCC_stream 0xF2



1111 1000  6  ITU-T H.222.1  建议书类型 E 0xF8




第二种:


  1011 1100  1  program_stream_map     0xBC



1011 1111  3  private_stream_2              0xBF



1111 0000  3  ECM_stream                     0xF0



1111 0001  3  EMM_stream                    0xF1



1111 1111  4  program_stream_directory 0xFF



1111 0010  5  ITU-T H.222.0 建议书 | ISO/IEC 13818-1  附件 A 或 ISO/IEC 13818-6_DSMCC_stream 0xF2



1111 1000  6  ITU-T H.222.1  建议书类型 E 0xF8



第三种


1011 1110  padding_stream                  0XBE

















以上是关于TS流分析-PES包头实例分析的主要内容,如果未能解决你的问题,请参考以下文章

PES,TS,PS,RTP等流的打包格式解析之PES流

视频流TS打包方式详解

TS流分析-packet header

ES流PES流PS流和TS流介绍

TS视频一

PS流格式解析