TS协议解析第三部分(PES)

原文地址:
https://blog.csdn.net/u013354805/article/details/51591229

  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句法句法示意图:

  1. 分析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:是保留值。
01:负载中只有有效载荷。
10:负载中只有自适应字段。
11:先有自适应字段,再有有效载荷。
continuity_counter
连续计数器
0x0:0000 0000 00000000
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

  1. 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数据的有效荷载。

  1. PES语法解析:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值