下面的字节是从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
标签:分析,00,01,字节,stream,TS,PES,1111 From: https://blog.51cto.com/u_13316945/5831970