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  = 1100 0000 = 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 = 111000101001PTS[29-15]1 标记位 赋值1 意义不明
06 75 =  0000 0 110 0111 0101 =  0000 0110 0111 010PTS[14-0]) 标记位 赋值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 011TDS[29-15]标记位,赋值1
06 75 = 0000  0 110 0111 0101 = 0000  0110 0111 010TDS[14-0] 1 标记位,赋值1 DTS = 4532568890
19 38 A7 06 75 这几个应该是任意填充字节。

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



附,

1. Wiki 对PES包头的定义


2. 图解

参考博客http://blog.csdn.net/cabbage2008/article/details/49871441


3. PES中扩展头部的判断

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

一种是非 (0xBC 0XBE  0xBF 0xF0 0xF1 0xF2 0xF8),这类可能又PTS/DTS信息
一种是0xBC  0xBF 0xF0 0xF1 0xF2 0xF8)其中之一。
一种是 0XBE,也就是padding_stream 。

第一种
if (stream_id != program_stream_map          1011 1100  1  program_stream_map     0xBC
&& stream_id != padding_stream                 1011 1110  padding_stream                  0XBE
&& stream_id != private_stream_2                1011 1111  3  private_stream_2              0xBF
&& stream_id != ECM                                     1111 0000  3  ECM_stream                     0xF0
&& stream_id != EMM                                   1111 0001  3  EMM_stream                    0xF1
&& stream_id != program_stream_directory    1111 1111  4  program_stream_directory 0xFF
&& stream_id != DSMCC_stream   1111 0010  5  ITU-T H.222.0 建议书 | ISO/IEC 13818-1  附件 A 或 ISO/IEC 13818-6_DSMCC_stream 0xF2
&& stream_id != ITU-T H.222.1  建议书类型 E stream)   1111 1000  6  ITU-T H.222.1  建议书类型 E 0xF8

第二种:
else if ( stream_id == program_stream_map    1011 1100  1  program_stream_map     0xBC
|| stream_id == private_stream_2                     1011 1111  3  private_stream_2              0xBF
|| stream_id == ECM                                         1111 0000  3  ECM_stream                     0xF0
|| stream_id == EMM                                        1111 0001  3  EMM_stream                    0xF1
|| stream_id == program_stream_directory     1111 1111  4  program_stream_directory 0xFF
|| stream_id == DSMCC_stream                       1111 0010  5  ITU-T H.222.0 建议书 | ISO/IEC 13818-1  附件 A 或 ISO/IEC 13818-6_DSMCC_stream 0xF2
|| stream_id == ITU-T H.222.1  建议书类型 E stream ) {      1111 1000  6  ITU-T H.222.1  建议书类型 E 0xF8

第三种
else if ( stream_id == padding_stream) {   1011 1110  padding_stream                  0XBE








  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值