PES介绍(转载)

 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

猜你喜欢

转载自www.cnblogs.com/wanggang123/p/12375672.html