1. PES:
1.1 PES介绍:
PES--Packetized Elementary Streams (分组的ES),ES形成的分组称为PES分组,是用来传递ES的一种数据结构。PES流是ES流经过PES打包器处理后形成的数据流,在这个过程中完成了将ES流分组、打包、加入包头信息等操作(对ES流的第一次打包)。PES流的基本单位是PES包。PES包由包头和payload组成。
1.2. PES句法句法示意图:
2. 分析PES包:
2.1 PES包数据:
2.2 包头:
TS包头只有4个字节(47 48 14 10),除掉第一个字节0x47,剩下就3个,重新分组如下:
0 1 0 0100000010100 00 01 0000
sync_byte |
同步字节 |
0x47: |
transport_error_indicator |
传输错误标识 |
0: |
payload_unit_start_indicator |
负载单元开始标识 |
1:可知这个包的负载部分有PES爆头,换句话说,也就是帧头所在。又由第二个TS包的分析可知,PID为814的TS包,存放的都是MP3格式的数据。可知这个包存储了MP3格式的一帧部分数据。 |
transport_priority |
传输优先级 |
0: |
pid |
PID |
0x814:因为在PMT中查找音频是program_map_PID为0x814。
|
transport_scrambling_control |
传输扰乱控制 |
00: |
adaptation_field_control |
自适应区域控制 |
01:可知负载只含有有效载荷单元,也就是PES包。而不含自适应字段。 00:是保留值。 |
continuity_counter |
连续计数器 |
0x0:0000 0000 00000000 |
10:默认规定
00:PES加扰控制
0:PES优先级
0:数据定位指示符
0:版权
0:原始的或复制的
|
10:PTS_DTS_flags,10代表后面将会有PTS信息。
000000:分别代表其他6个标志,0表示后面没有对应的信息。
|
PES头数据长度,表示后面还有0x05个字节,之后就是一帧的数据内容。 PES头数据具体包含哪些内容有前面的标志位来确定,哪些信息得标志位1,就包含哪些信息。排列顺序分别是PTS DTS ESCR ES速率 DSM特技方式 附件的复制信息 前PES的CRC PES 扩展,如果还有多余的字节没用,就用填充字节0xFF填充。 本例子中,PES头数据只包含PTS数据。 |
If(PTS_DTS_flags == ‘10’){ |
|
‘0010’ |
4 |
PTS[32..30] |
3 |
marker_bit |
1 |
PTS[29..15] |
15 |
marker_bit |
1 |
PTS[14..0] |
15 |
marker_bit |
1 |
} |
|
0010:默认规定,4位
000:PTS[32..30] 3位
1:marker_bit:1位
0000 0000 0000 000:PTS[29..15] 15位
1:market_bit 占1位
1001 0110 0000 011:PTS[14..0] 15位
1:marker_bit 1位
|
packet_start_code_prefix |
0x00 00 01 |
stream_id |
0xC0:流ID |
PES_packet_length |
0x01 88:PES包长度 |
‘10’ |
2b:10 |
PES_scrambling_control |
2b:0 |
PES_priority |
1b:0 |
Data_alignment_indicator |
1b:0 |
copyright |
1b:0 |
Original_or_copy |
1b:0 |
PTS_DTS_flags |
2b:10 |
ESCR_flag |
1b:0 |
ES_rate_flag |
1b:0 |
DSM_trick_mode_flag |
1b:0 |
Additional_copy_info_flag |
1b:0 |
PES_CRC_flag |
1b:0 |
PES_extension_flag |
1b:0 |
PES_header_data_length |
8b:0x05 |
PTS_DTS data |
40b:0x21 00 01 96 07 |
3. PES第二个数据包:
3.1 PES包数据:
3.2 包头:
S包头只有4个字节(47 08 14 11),除掉第一个字节0x47,剩下就3个,重新分组如下:
0 0 0 0100000010100 00 01 0001
sync_byte |
同步字节 |
0x47: |
transport_error_indicator |
传输错误标识 |
0: |
payload_unit_start_indicator |
负载单元开始标识 |
0:有效载荷单元起始符为0,表示不是帧头,不含PES包头数据,只有PES负载(PES负载就是一帧数据) |
transport_priority |
传输优先级 |
0: |
pid |
PID |
0x814:因为在PMT中查找音频是program_map_PID为0x814。
|
transport_scrambling_control |
传输扰乱控制 |
00: |
adaptation_field_control |
自适应区域控制 |
01:可知负载只含有有效载荷单元,也就是PES包。而不含自适应字段。 00:是保留值。 |
continuity_counter |
连续计数器 |
0x0001:0000 0000 00000001 |
3.3 TS数据:
去除包头都是MP3数据的有效荷载。
4. PES语法解析: