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个,重新分组如下:
2.3 TS包:
1) 00 00 01:包起始码前缀。默认规定。占24位,3个字节。(47 48 14 1000 00 01 C0 01 88 80 80 05 21 00 01 96 07 FF FD 85 00 33 22)
2) C0:1100 0000:流ID,占8位(47 48 14 10 00 00 01 C0 01 88 80 80 05 21 00 01 96 07 FF FD 85 00 33 22)
3)01 88:0000 0001 1000 1000 PES包长度,也就是一帧数据的总长度(也就是这帧长度是392字节)。(47 48 14 10 00 00 01 C0 01 88 80 80 05 21 00 01 96 07 FF FD 85 00 33 22)
4)80:1000 0000(47 48 14 10 00 00 01 C0 01 88 80 80 05 21 00 01 96 07 FF FD 85 00 33 22)
10:默认规定
00:PES加扰控制
0:PES优先级
0:数据定位指示符
0:版权
0:原始的或复制的
5)80:1000 0000(47 48 14 10 00 00 01 C0 01 88 8080 05 21 00 01 96 07 FF FD 85 00 33 22)
10:PTS_DTS_flags,10代表后面将会有PTS信息。
000000:分别代表其他6个标志,0表示后面没有对应的信息。
6)05:0000 0101(47 48 14 10 00 00 01 C0 01 88 80 80 05 21 00 01 96 07 FF FD 85 00 33 22)
PES头数据长度,表示后面还有0x05个字节,之后就是一帧的数据内容。
PES头数据具体包含哪些内容有前面的标志位来确定,哪些信息得标志位1,就包含哪些信息。排列顺序分别是PTS DTS ESCR ES速率 DSM特技方式 附件的复制信息 前PES的CRC PES 扩展,如果还有多余的字节没用,就用填充字节0xFF填充。
本例子中,PES头数据只包含PTS数据。
7)21 00 01 96 07:5个字节总共40位(47 48 14 10 00 00 01 C0 01 88 80 80 05 21 00 01 96 07 FF FD 85 00 33 22)
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位
PES,包头分析完。剩下的数据就全是帧数据的一部分数据了。
8)FF FD 85 00 33 22:(47 48 14 10 00 00 01 C0 01 88 80 80 05 21 00 01 96 07 FF FD 85 00 33 22)这些数据符号MP3格式。
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:是保留值。
01:负载中只有有效载荷。
10:负载中只有自适应字段。
11:先有自适应字段,再有有效载荷。
continuity_counter
连续计数器
0x0001:0000 0000 00000001
3.3 TS数据:
去除包头都是MP3数据的有效荷载。
4. PES语法解析:
————————————————
版权声明:本文为CSDN博主「ChenYuanshen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013354805/article/details/51591229