- PES:
1.1 PES介紹:
PES–Packetized Elementary Streams (分組的ES),ES形成的分組稱為PES分組,是用來傳遞ES的一種資料結構。PES流是ES流經過PES打包器處理後形成的資料流,在這個過程中完成了将ES流分組、打包、加入標頭資訊等操作(對ES流的第一次打包)。PES流的基本機關是PES包。PES包由標頭和payload組成。
1.2. PES句法句法示意圖:
- 分析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
- 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
- PES文法解析: