|
其中:
表2-18 Stream_id賦值
stream_id |
stream_id |
1011 1100
|
1
program_stream_map( | 0xBC)
|
1011 11 1110 |
padding_stream(0xBE) |
|
1011 1111
|
3
private_stream-2(0xBF) |
|
GB/T XXXX.3或GB/T AAAA.3音頻串流編號xxxx( 0xC0~0xDF | )
| 1110 xxxx |
.7X7272/4878( ) |
1111 0000 |
3 |
ECM_stream(0xF0) |
ECM_stream(0xF0)
ECM_stream(0xF0) |
3
|
EMM_stream(0xF1) |
1111 0010 | 5 | GB/T XXXX.1附錄B或GB/T XXXX.6_DSMCC_stream(0xF2) |
1111% ISO/IEC_13522_stream(0xF3) |
| 1111 0100 | 6
ITU-T Rec. H.222.1模式A |
ITU-T Rec. H.222.1模式A
| 6 | ITU-T Rec. H .222.1型B
| 1111 0110 | 6
|
6
|
ITU- T Rec. H.222.1型D
|
1111 1000 |
6
|
ITU-T 6
| 1. 001 | 7
ancillary_stream(0xF9) |
| 1111 1010…1111 1110 |
1111 1111 | 4 | program_stream_directory(0xFF)
|
符號x表示值'0'或'1'都被允許且可產生相同的流類型。流號碼由x的值決定。 註 | 1 類型為program_stream_map的PES分組有唯一的語法,在2.5.4.1中作了規定 。
2 類型為private_stream_1和ISO/IEC_13352_stream的PES分組與GB/T XXXX.2及GB/T XXXX.3音頻流服從相同的PES分組語法。
3 類型為private_stream_2,ECM_stream和EMM_stream的PES分組與private_stream_1相似,除了在PES_packet_length字段後未規定語法。
4 類型為program_stream_directory的PES分組有唯一的語法,在2.5.5中作了規定。
5 類型為DSM_CC_stream的PES分組有唯一的語法,在GB/T XXXX.6中作了規定。
6 stream_id與表2-29中的stream_type 0x09相關聯。
7 stream_id僅用於PES分組。 PES分組在傳輸流中攜帶了來自節目流或GB/T AAAA.1系統流的資料(參見2.4.3.7)。
|
PES分組中各字段的語意定義
分組起始碼前綴字段 packet_start_code_prefix
24位代碼,它和標識後面的stream_id
組分組的分組代碼,它和標識後面的stream_id組成了分組開始的組分起始碼。它是一個值為'0000 0000 0000 0000 0000 0001' (0x000001)的位元字串。
流識別欄位 stream_id
在節目流程中,它規定了基本流的號碼和類型。定義參見表2-18。在傳輸流中,它可以被設定為正確描述表2-18中定義的基本流類型的任何有效值。在傳輸流中,基本流類型在2.4.4的節目特定資訊中作了規定。 PES
分組長度字段 PES_packet_length
16位元字段,指出了PES分組中跟在該字段後的位元組數目。值為0表示PES分組長度不是沒有規定或沒有限制。這種情況只允許出現在有效負載包含來自傳輸流分組中某個視訊基本流的位元組的PES分組中。 PES
加擾控製字段 PES_scrambling_control
2位元字段,表示PES分組有效負載的加擾方式。當加擾發生在PES層,PES分組標題,如果有可選字段的話也包括在內,不應被加擾(參見2-19)。 PES
優先權字段 PES_priority
1位元字段,指示PES分組中有效負載的優先權。 '1'表示PES分組中有效負載的優先權高於該欄位為'0'的PES分組有效負載。多路複合器能使用此欄位來區分安排基本流中資料的優先權。傳輸機制不應改動該欄位。
資料對齊指示符欄位 data_alignment_indicator
1位元標誌。置'1'時表示PES分組標題後緊接著在2.6.10中的data_alignment_indicator所指出的視訊起始碼或音訊同步字,如果有data_alignment_indicator描述符的話。若其值為'1'且無該描述符,則需要在表2-47和2-48中alignment_type '01'所表示的對齊。當值為'0'時,沒有定義是否有任何此種的對齊。
版權欄位 copyright
1位元欄位。置'1'時表示相關PES分組有效負載的材料受到版權保護。當值為'0'時,沒有定義該資料是否受到版權保護。 2.6.24中所述的版權描述符與包含PES分組的基本流相關。若描述符作用於包含PES分組的資料,則版權標誌置為'1'。
原始或拷貝欄位 original_or_copy
1位元欄位。置'1'時表示相關PES分組有效負載的內容是原始的;值為'0'表示相關PES分組有效負載的內容是一份拷貝。 PTS DTS
標誌欄位 PTS_DTS_flags
2位元欄位。當值為'10'時,PTS字段應出現在PES分組標題中;當值為'11'時,PTS字段和DTS字段都應出現在PES分組標題中;當值為'00'時,PTS字段和DTS欄位都不出現在PES分組標題中。值'01'是不允許的。 ESCR
標誌欄位 ESCR_flag
1位元標誌。置'1'時表示ESCR基礎和擴充欄位出現在PES分組標題中;值為'0'表示沒有ESCR欄位。 ES
速率標誌欄位 ES_rate_flag
1位元標誌。置'1'時表示ES_rate欄位出現在PES分組標題中;值為'0'表示沒有ES_rate欄位。 DSM
特技方式標誌欄位 DSM_trick_mode_flag
1位元標誌。置'1'時表示有8位元特技方式欄位;值為'0'表示沒有該欄位。
附加版權資訊標誌欄位 additional_copy_info_flag
1位元標誌。置'1'時表示有附加拷貝資訊欄位;值為'0'表示沒有該欄位。 PES CRC
標誌欄位 PES_CRC_flag
1位元標誌。置'1'時表示CRC欄位出現在PES分組標題中;值為'0'表示沒有該欄位。 PES
擴充標誌欄位 PES_extension_flag
1位元標誌。置'1'時表示PES分組標題中有擴充欄位;值為'0'表示沒有該欄位。 PES
標題資料長度欄位 PES_header_data_length
8位元欄位。指出包含在PES分組標題中的可選欄位和任何填充位元組所佔用的總位元組數。該字段之前的位元組指出了有無可選字段。
標記位元欄位 marker_bit
值為'1'的1位元欄位。
展現時間戳字段 PTS🎜 🎜展現時間與解碼時間的關係如下:PTS是一個編碼在三個分離字段中的33位數。它指出了基本流n的第k個展現單元在系統目標解碼器中的展現時間tpn(k)。 PTS的值以系統時脈頻率的1/300(即90 kHz)為單位。展現時間由PTS根據式2-11計算。編碼展現時間戳頻率的限制參考2.7.4。
PTS(k)=((system_clock_frequency×tpn(k (2-11)其中,tpn
(k)是展現單元Pn(k)的展現時間。 對音訊而言,若PES分組標題中有PTS,則它是指PES分組中開始的第一個存取單元。若PES分組中有音訊存取單元的首字節,則有一個音訊存取單元開始於該PES分組中。
對影片而言,若PES分組標題中有PTS,則它是指包含PES分組中開始的第一個畫面起始碼的存取單元。若PES分組中有畫面起始碼的首字節,則有一個畫面起始碼開始於該PES分組中。 對音頻展現單元(PU),low_delay序列中的視頻PU以及B畫面,展現時間tpn
(k)應等於tdn(k)。 對於非low_delay中的I畫面和P畫面,在存取單元(AU) k和k'之間無解碼不連續時,展現時間tpn
(k)應等於下一個傳輸的I畫面或P畫面的解碼時間tdn(k) (參見2.7.5)。若有解碼不連續或流終止,則tpn(k)和tdn(k)之間的差別應與初始流一直延續,沒有不連續也沒有終止時完全相同。 註1: low_delay序列是low_delay標誌被設定的視訊序列(參見GB/T XXXX.2中的6.2.2.3)。
若音訊中有濾波,則系統模型假定濾波不會導致延遲。因此,編碼時PTS所涉及的取樣與解碼時PTS所涉及的取樣是相同的。可伸縮編碼,請參閱2.7.6。
解碼時間戳字段 DTS
DTS是一個編碼在三個分離字段中的33位數。它指出了基本流n的第j個展現單元在系統目標解碼器中的解碼時間tdn
(j)。 DTS的值以系統時脈頻率的1/300 (即90 kHz)為單位。解碼時間由DTS依據式2-12計算而來:DTS
(j)=((system_clock_frequency×tdn(j (2 -12)其中,tdn(j)是存取單元An(j)的解碼時間。
對影片而言,若PES分組標題中有DTS,則它是指包含PES分組中開始的第一個畫面起始碼的存取單元。若PES分組中有畫面起始碼的首字節,則該畫面起始碼開始於該PES分組中。 對於可伸縮編碼,參見2.7.6。
ESCR字段 ESCR_base,ESCR_extension 42位字段,分兩部分編碼。第一部分是長度為33位元的字段,其值ESCR_base(i)由式2-14給出;第二部分是長度為9位元的字段,其值ESCR_ext(i)由式2-15給出。 ESCR欄位指出了基本流中包含ESCR_base最後一個位元的位元組到達PES-STD輸出端的期望時間(參見2.5.2.4)。 特別地
ESCR(
i)=
ESCR_base(i)×300+ (2-13)(其中:ESCR_base(i )=((system_clock_frequency×
t(
i)) p 300) % 233 i)=((system_clock_frequency× t(i)) p 1) % 300 (2-15)ESCR和ES_rate欄位(請參閱下方緊接的語意)包含時間點相關的時間PES。這些字段應滿足2.7.3中定義的約束。
基本流量速率欄位 ES_rate 22位元無符號整數。對於PES流而言,它指出了系統目標解碼器接收PES分組的速率。此欄位在它所屬的PES分組以及同一個PES流的後續PES分組中一直有效,直到遇到一個新的ES_rate欄位。此欄位的值以50位元組/秒為單位,且不能為0。此欄位用於定義PES流的位元組到達P-STD輸入端的時間(請參閱2.5.2.4中的定義)。在各個PES分組中,編碼在該欄位中的值可能不同。 特技方式控製字段 trick_mode_control 3位元字段。它表示作用於相關視訊串流的特技方式。對其它類型的基本流,該字段及其後5位的含義沒有定義。 trick_mode狀態的定義請參考2.4.2.3的特技模式部分。
當trick_mode狀態為假時,對GB/T XXXX.2影片而言,解碼過程輸出漸進序列中每幅畫面的次數N由repeat_first_field和top_field_first欄位來規定。對GB/T AAAA.2影片而言,由序列標題決定。
對於隔行序列,當trick_mode狀態為假時,對GB/T XXXX.2影片而言,次數N由repeat_first_field和progressive_frame欄位來規定。
當trick_mode狀態為真時,畫面的播放次數依賴值N。
表2-20 特技方式控制值
表2-20 特技方式控制值 |
值 |
描 述
|
'001' |
慢動作
|
'010' |
凍結幀
|
'0111' | '100'
慢倒 | | '101'-'111'
保留 |
當此字段值發生變化或特技模式操作停止時,可能會出現下列情況的任意組合:
l 時基不連續; 連續性計數器不連續;在在特技模式的情況下,解碼和展現的非標準速度可能會導致影片基本流資料中定義的某些欄位值不正確。同樣,片段結構的語意約束也可能無效。這些例外所涉及的視訊文法元素為:l bit_rate;l field;l v_axis_positive;l l burst_amplitude;l subcarrier_phase; 在特技模式中,解碼器不應該依賴編碼在這些欄位中的值。 標準並不要求解碼器能解碼trick_mode_control字段。但是,能解碼該欄位的解碼器應能滿足以下標準要求。
快轉fast forword trick_mode_control欄位中的值'000'。當該值出現時,它表示一個快轉視訊串流並定義了PES分組標題中後續5位元的含義。 intra_slice_refresh位元可以設定為'1'以指出可能有遺失的巨集區塊。解碼器可以用前一個解碼畫面中相同位置的宏塊來代替。表2-21中定義的field_id字段,表示應該顯示哪個或哪些字段。 frequency_truncation欄位指出了可能包含的係數受限集合。此欄位值的含義如表2-22所示。
慢動作 slow motion trick_mode_control欄位中的值'001'。當該值出現時,它表示一個慢動作視訊串流,並定義了PES分組標題中後續5個位元的含義。對漸進序列而言,該畫面應顯示N×rep_cntrl時間,其中N定義如上。 對GB/T AAAA.2視訊和GB/T XXXX.2視訊漸進序列而言,該畫面應被顯示N×rep_cntrl時間,其中N定義如上。 對GB/T XXXX.2隔行序列而言,該畫面應顯示N×rep_cntrl時間。若該畫面是一個幀畫面,則待顯示的第一個字段在top_field_first為1時應該是頂字段,在top_field_first為0時,應該是底字段(參見GB/T XXXX.2)。該欄位被顯示N×rep_cntrl / 2時間。該畫面的其它欄位被顯示N-N×rep_cntrl / 2時間。 凍結幀 freeze frame trick_mode_control字段中的值'010'。當該值出現時,它表示凍結幀視訊串流,並定義了PES分組標題中後續5位元的含義。表2-21中定義的field_id字段,表示應該顯示哪個(一些)字段。 field_id欄位指出了包含該欄位的PES分組中開始的第一個視訊存取單元,除非該PES分組包含0個有效負載位元組。在後一種情況下,field_id欄位指出了最近的前一個視訊存取單元。
快倒 fast reverse trick_mode_control欄位中的值'011'。當該值出現時,它表示一個快倒視訊串流並定義了PES分組標題中後續5位元的含義。 intra_slice_refresh位元可以設定為'1'以指出可能有遺失的巨集區塊。解碼器可以用前一個解碼畫面中相同位置的宏塊來代替。表2-21中定義的field_id字段,表示應該顯示哪個或哪些字段。 frequency_truncation欄位指出了可能包含的係數受限集合。此欄位值的意義如表2-22「係數選擇值」所示。
慢倒 slow reverse trick_mode_control字段中的值'100'。當該值出現時,它表示一個慢倒視訊流並定義了PES分組標題中後續5位元的含義。對GB/T AAAA.2視訊和GB/T XXXX.2視訊漸進序列而言,該畫面應被顯示N×rep_cntrl時間,其中N定義如上。 對GB/T XXXX.2隔行序列而言,該畫面應顯示N×rep_cntrl時間。若該畫面是一個幀畫面,則待顯示的第一個字段在top_field_first為1時應該是底字段,在top_field_first為'0'時,應該是頂字段(參見GB/T XXXX.2)。該欄位被顯示N×rep_cntrl/2時間。該畫面的其它欄位被顯示N-N×rep_cntrl / 2時間。
字段標識字段 field_id 2位元字段,表示應該顯示哪個(一些)字段。根據表2-21對其進行編碼。
表2-21 field_id字段控制值
值 |
描 述 |
蟜 | '01' | 僅自底向上播放
| '10' | 播放所有幀
'10' | 播放所有幀' |
片內參考字段intra_slice_refresh
| 1位元標誌。置'1'時表示PES分組的視訊資料編碼片中可能有遺失的宏塊;置'0'時,表示上述情況可能不出現。更多的資訊可參考GB/T XXXX.2。解碼器可以用前一個解碼畫面中同一個位置的宏塊來取代遺失的宏塊。
頻率截斷欄位 frequency_truncation |
2位元欄位。指出PES分組中資料編碼時可能會用到受限係數集合。其值定義於表2-22。
表2-22 係數選擇值
值
描述
'01' | 僅前三個係數非0 |
'10' | 僅前六個係數非0 |
僅前六個係數非0
' |
顯示次數控製字段 rep_cntrl
5位元字段,指出隔行畫面中每一字段的顯示次數或漸進式畫面顯示次數。對隔行畫面而言,頂字段或底字段是否應首先顯示是視訊序列標題中trick_mode_control字段和top_field_first字段的功能。該欄位值不能為'0'。
附加版權資訊字段 additional_copy_info
7位元字段,包含與版權資訊相關的專用資料。
前PES分組CRC字段 previous_PES_packet_CRC
16位元字段。在對前一個PES分組(不包括該PES分組的標題)進行處理後,此欄位包含一個在解碼器的16個暫存器中產生0輸出的CRC值。此CRC值與附錄A中所定義的相類似,但具有以下多項式:
x16+x12+x5+1
注2: x 5+1注2: CRC3值是為了用於網絡維護,例如將有間隙性錯誤的來源隔離開來,而不是為了供基本流解碼器使用。它僅用於計算資料位元組,因為在傳輸過程中PES分組標題資料可能會被修改。 PES專用資料標誌欄位 PES_private_data_flag 1位元標誌。置'1'時表示PES分組標題包含專用資料;置'0'時表示PES分組標題中無專用資料。
包標題欄位標誌欄位 pack_header_field_flag 1位元標誌。置'1'時表示PES分組標題中有GB/T AAAA.2包標題或節目流包標題。若該欄位在包含於節目流程中的PES分組中,其值應為'0'。在傳輸流中,當值為'0'時表示PES標題中無包標題。
節目分組序列計數標誌欄位 program_packet_sequence_counter_flag 1位元標誌。值為'1'時表示PES分組有program_packet_sequence_counter,MPEG1_MPEG2_identifier和original_stuff_length欄位。值為'0'時表示PES分組標題中無這些欄位。 P-STD緩衝區標誌欄位 P-STD_buffer_flag 1位元標誌。置'1'時表示PES分組標題中有P-STD_buffer_scale和P-STD_buffer_size欄位。值為'0'時表示PES標題中無這些欄位。 PES擴充標誌欄位 PES_extension_flag_2 1位元標誌,置'1'時表示有PES_extension_field_length及相關欄位。 PES專用資料欄位 PES_private_data 16位元欄位。包含專用資料。這些資料與其前後的欄位組合在一起時,不能與packet_start_code_prefix (0x000001)衝突。
套件字段長度字段 pack_field_length 8位元字段。表示pack_header_field()以位元組為單位時的長度。
節目分組序列計數欄位 program_packet_sequence_counter 7位元欄位。它是一個可選的計數器,隨著來自於節目流或GB/T AAAA.1流的每一個後續的PES分組或傳輸流中具有單一節目定義的PES分組而遞增,以提供與連續性計數器(參見2.4.3.2)相似的功能。它能用於檢索節目流或原始GB/T AAAA.1流中的初始PES分組序列。此計數器在達到最大值後回捲為0。 PES分組不能出現重複。因此,複合節目中任何兩個連續的PES分組不應具有相同的program_packet_sequence_counter值。 MPEG1 MPEG2標識符欄位 MPEG1_MPEG2_identifier 1位元標誌。置'1'時表示PES分組所攜帶的資訊來自於GB/T AAAA.1流;置'0'時表示PES分組所攜帶的資訊來自於節目流。 初 始填充長度欄位 original_stuff_length 6位元欄位。指定用於初始GB/T XXXX.1分組標題或初始GB/T AAAA.1分組標題中的填滿位元組數。 P-STD緩衝區比例欄位 P-STD_ buffer_scale 1位元欄位。僅當該PES分組包含於節目流中時才有意義。它指出了用來解釋後續P-STD_buffer_size字段的比例因子。若前面的stream_id表示一個音訊串流,則該欄位值應為'0';若前面的stream_id表示一個視訊串流,則該欄位值應為'1'。對於所有的其它流類型,其值可以為'0'或'1'。 P-STD🎜🎜緩衝區大小欄位 P-STD_buffer_size 🎜🎜13位元無符號整數。僅當該PES分組包含於節目流中時才有意義。它定義了P-STD輸入緩衝區的大小BSn。若P-STD_ buffer_scale的值為'0',那麼P-STD_buffer_size以128位元組為單位來度量緩衝區的大小。若P-STD_buffer_scale的值為'1',那麼P-STD_buffer_size以1024位元組為單位來度量緩衝區的大小。因此:
if ( P-STD_buffer_scale == 0)
BSn= BSn
= P -STD_buffer_size×1024 (2-17)當此欄位被GB/T XXXX.1系統目標解碼器收到後,其編碼值則立即生效。 PES 擴充欄位長度欄位 PES_extension_field_length
7位元欄位。指出了跟在該欄位之後在PES擴充欄位中直到且包含任何保留位元組的資料的位元組長度。 填充位元組字段 stuffing_byte
8位元字段,其值恆定為'1111 1111'。可以由編碼器插入以滿足通道的需求等。解碼器丟棄該欄位。一個PES分組標題中只能出現32個填充位元組。
PES 分組資料位元組欄位 PES_packet_data_byte
此欄位應該是來自於分組的stream_id或PID所指定的基本流的連續資料位元組。當基本流資料符合GB/T XXXX.2或GB/T XXXX.3時,該欄位應該是與本標準的位元組相對齊的位元組。基本流的位元組序應保持。此欄位的位元組數N由PES_packet_length欄位規定。 N應等於PES_packet_length減去在PES_packet_length欄位的最後一個位元組與第一個 PES_packet_data_byte間的位元組數。 填料位元組字段 padding_byte
8位元字段,其值恆定為'1111 1111'。此欄位被解碼器丟棄。
更多PS流的格式與解析總結 相關文章請關注PHP中文網!
|
|