比率SCFR値は正確です。標準レートが 23.976、29.97、または 59.94 フレーム/秒の場合、実際のフレーム レートは標準レートと若干異なります。
ビデオバウンドフィールド video_bound
5 ビットフィールド、値は 0 から 16 までの閉じた間隔の整数であり、デコード処理が行われる GB/T XXXX.2 および GB/T AAAA 以上です。プログラムストリーム内で同時にアクティブになります。2 ストリームの最大数。このセクションでは、P-STD バッファが空でない場合、またはプレゼンテーション ユニットが P-STD モデルで提示されている場合、GB/T XXXX.2 および GB/T AAAA.2 ビデオ ストリームのデコード プロセスがアクティブになります。
パケットレート制限フラグフィールド packet_rate_restriction_flag
1ビットのフラグ。 CSPS フラグが「1」の場合、このフィールドは、2.7.9 で指定されている制限のどれがパケット レートに適用されるかを示します。 CSPS フラグが「0」の場合、このフィールドの意味は未定義です。
予約ビットフィールドreserved_bits
7ビットフィールド。 ISO/IEC による将来の使用のために予約されています。 ISO/IEC が別途指定しない限り、その値は「111 1111」となります。
ストリーム識別フィールド stream_id
8ビットフィールド。後続の P-STD_buffer_bound_scale フィールドと P-STD_buffer_size_bound フィールドに関与するストリームのエンコーディングとエレメンタリ ストリーム番号を示します。
値が「1011 1000」の場合、後続の P-STD_buffer_bound_scale フィールドと P-STD_buffer_size_bound フィールドは、プログラム ストリーム内のすべてのオーディオ ストリームを参照します。
値が「1011 1001」の場合、後続の P-STD_buffer_bound_scale フィールドと P-STD_buffer_size_bound フィールドは、プログラム ストリーム内のすべてのビデオ ストリームを参照します。
stream_id が他の値を取る場合、それは「1011 1100」以上の 1 バイト値である必要があり、表 2-18 に従ってストリームのエンコーディングおよび基本ストリーム番号として解釈される必要があります。
プログラムストリーム内の各エレメンタリストリームには、このメカニズムを介してシステムヘッダーごとに P-STD_buffer_bound_scale と P-STD_buffer_size_bound を 1 回だけ指定する必要があります。
P-STDバッファバウンドスケールフィールド P-STD_buffer_bound_scale
1ビットフィールド。後続の P-STD_buffer_size_bound フィールドを解釈するために使用されるスケーリング係数を示します。前の stream_id がオーディオ ストリームを表す場合、このフィールドの値は「0」です。ビデオ ストリームを表す場合、このフィールドの値は「1」です。他のすべてのストリーム タイプの場合、このフィールド値は「0」または「1」になります。
P-STDバッファサイズ制限フィールド P-STD_buffer_size_bound
13ビット符号なし整数、値はプログラム内の全パケットのP-STDバッファサイズBSnの最大値以上ストリーム n 。 P-STD_buffer_bound_scale の値が「0」の場合、このフィールドはバッファ サイズの境界を 128 バイト単位で測定します。 P-STD_buffer_bound_scale の値が「1」の場合、このフィールドはバッファ サイズの境界を 1024 バイト単位で測定します。したがって:
if (P-STD_buffer_bound_scale == 0)
BSn≤P-STD_buffer_size_bound×128
else
BSn≤ P-STD_buffer_size_bound×1024
したがって、システム ヘッダーの分析では、通常、最初にシステム ヘッダーがあるかどうか (システム ヘッダーの開始コード 0x000001BB に従って) を判断し、次にシステム ヘッダーのヘッダー長を読み取るだけで済みます。 、つまり、PS SYSTEM HEADER LENGTH 部分です。次に、ヘッダーの長さに基づいて、PS システム ヘッダーをスキップします。次の部分、PS プログラム ストリーム マッピング ヘッダーに進みます。
============================================== === ===========
次に、PS ストリームのプログラム マッピング ストリーム部分 (プログラム ストリーム マッピング) の定義を見てみましょう: (MPEG-2 標準ドキュメントより) 表 2-35 プログラムストリームマッピング
言語メソッド
|
数字
|
ニーモニック
|
program_stream_map() {
|
|
|
packet_start_code_prefix
| 24 |
bslbf |
map_stream_id | 8 | uimsbf |
program_stream_map_length |
16 |
uimsbf |
current_next_indicator |
1 |
bslbf |
予約済み |
2 |
bslbf |
program_stream_map_version |
5 |
uimsbf |
予約済み |
7 |
bslbf |
marker_bit |
1 |
bslbf |
program_stream_info_length |
16 |
uimsbf |
for (i=0;i& lt;N;i++){ |
|
|
descriptor() |
|
|
} |
|
|
elementary_stream_map_length |
16 |
uimsbf |
(i=0;i |
|
|
stream_type |
8 |
uimsbf |
elementary_stream_id |
8 |
uimsbf |
Elementary_stream_info_length |
16 |
uimsbf |
for (i=0;i |
|
|
descriptor() |
|
|
} |
|
|
} |
|
|
CRC_32 |
32 |
rpchof |
} |
|
|
プログラム ストリーム マッピングの各フィールドのセマンティック定義:
パケット スタート コード プレフィックス フィールド packet_start_code_prefix
24 ビット コード。これとそれに続くmap_stream_idは、グループの開始をマークするグループ開始コードを形成します。このフィールドは、値「0000 0000 0000 0000 0000 0001」(0x000001) のビット文字列です。
マップストリーム識別フィールドmap_stream_id
8ビットフィールド、値は0xBCです。
プログラムストリームマップ長フィールドprogram_stream_map_length
16ビットフィールド。このフィールドの直後に続くprogram_stream_mapのバイト数を示します。このフィールドの最大値は 1018 (0x3FA) です。
現在の次のインジケータフィールド current_next_indicator
1ビットフィールド。 「1」に設定すると、送信されたプログラム ストリーム マッピングが現在利用可能であることを示します。 「0」に設定すると、送信されたプログラム ストリーム マッピングはまだ使用できませんが、それが次に有効なテーブルになることを意味します。
プログラムストリームマップバージョンフィールドprogram_stream_map_version
プログラムストリームマップ全体のバージョン番号を示す5ビットフィールド。プログラム ストリーム マップの定義が変更されるたびに、このフィールドは 32 を法とする 1 ずつ増加します。 current_next_indicator が「1」の場合、このフィールドは現在適用可能なプログラム ストリーム マッピングのバージョン番号である必要があり、current_next_indicator が「0」の場合、このフィールドは次に適用可能なプログラム ストリーム マッピングのバージョン番号である必要があります。
番組ストリーム情報長フィールドprogram_stream_info_length
16ビットのフィールドで、このフィールドの直後に続く記述子の合計長を示します。
マーカービットフィールド marker_bit
1ビットフィールド、値は「1」です。
エレメンタリーストリームマップ長フィールドelementary_stream_map_length
プログラムストリームマップ内のすべてのエレメンタリーストリーム情報のバイト長を示す16ビットのフィールド。 これには、stream_type、elementary_stream_id、elementary_stream_info_length フィールドのみが含まれます。 (ここでの基本ストリーム マッピングの長さには、後で指定する定義フィールドの合計のみが含まれることに注意してください。つまり、この長さから、後でストリーム定義の種類が何種類あるかを知ることができます。ストリームのフィールド: stream_type (1BYTE)、elementary_stream_id (1byte)、elementary_stream_info_length (2byte) は 4 バイトなので、elementary_stream_map_length/4 を使用して、後で定義されるいくつかのストリーム タイプ情報を取得できます)
ストリーム タイプ フィールド stream_type
。 8 ビットのフィールドは、表 2-29 に従ってストリームのタイプを指定します。このフィールドは、PES パケットに含まれるエレメンタリ ストリームのみをマークでき、値を 0x05 にすることはできません。
(ここで国家標準 GB28181 の定義に基づいて一時的に知ることができます
1. MPEG-4 ビデオ ストリーム: 0x10;
2. H.264 ビデオ ストリーム: 0x1B;
3. SVAC ビデオ ストリーム: 0x80 ;
4. G.711 オーディオ ストリーム: 0x90、G.722.1 オーディオ ストリーム: 0x93、G.729 オーディオ ストリーム: 0x99。 8、SVAC オーディオ ストリーム: 0x9B
プログラム マッピング ストリーム フィールドはキー フレームがパッケージ化された場合にのみ存在するため、PS パッケージ化のストリーム エンコード タイプを決定したい場合は、このフィールドに基づいて判断してください
基本的には、ストリーム識別フィールドelementary_stream_id
エレメンタリストリームが配置されているPESグループのPESグループヘッダー内のstream_idフィールドの値を示す8ビットのフィールド。 (このフィールドの定義。0x(C0~DF) はオーディオを指し、0x(E0~EF) はビデオを指します) 基本ストリーム情報の長さフィールドelementary_stream_info_length
16 ビットフィールド。フィールドに続く記述子のバイト単位の長さ。 (つまり、このタイプのストリーム記述長。このフィールドの後に指定された長さは、elementary_stream_map_length で指定された範囲クラスにありません。)
CRC 32 フィールド CRC_32 32 ビット フィールド。処理用の CRC 値 付録 A で定義されているデコーダ レジスタは、プログラム ストリーム全体をマッピングした後、出力値 0 を生成します。
このフィールドの分析には、プログラム ストリーム マッピングの開始を示す値 0x000001BC のビット文字列が必要です。当面は、ヘッダー長を読み取って直接スキップするだけです。ストリームのエンコーディング タイプを解析する必要がある場合は、このフィールドを詳細に分析する必要があります。
================== PESパック======================== === ===
次に、PES パッケージの内容を分析しましょう: PES package = PES header+code raw data;
まず、PES ヘッダーを見てみましょう: (http:/ より) /www.php .cn/)
それでは、解析手順を見てみましょう: (MPEG-2標準ドキュメントより)
表2-17 PESグループ化
言語方式 |
桁数 |
ニーモニックシンボル
|
PES_packet(){ |
|
|
packet_start_ code_prefix |
24 |
bslbf |
stream_id |
8 |
uimsbf |
PES_packet_length |
16 |
uimsbf |
if( stream_id != プログラムストリームマップ |
|
|
&& stream_id !=padding_stream |
|
|
&& stream_id ! =private_stream_2 + |
|
&& stream_id !=EMM + |
&& stream_id !=DSMCC_stream |
|
|
&& stream_id !=ITU-T Rec.H.222.1 type E ストリーム){ |
|
|
'10' |
2
|
bslbf |
| PES_scrambling_control
| 2 bslbf |
PES_priority |
1 |
bslbf |
|
data_alignment_indicator
|
1
|
bslb f
|
著作権
|
1
|
bslbf
|
オリジナルまたはコピー
|
1
|
bslbf
|
PTS_DTS_flags
|
2 |
bslbf |
ESCR_flag |
1 | bslbf |
ES_rate_flag |
1 |
bslbf |
DSM_trick_mode_flag |
1 |
bs lbf |
Additional_copy_info_flag |
1 | bslbf |
PES_CRC_flag |
1 |
bslbf |
PES_extension_flag |
1 |
bslbf |
PES_header_data_length |
8 |
uimsbf |
if(PTS_DTS_flags =='10'){
|
|
|
'0010' |
4 |
bslbf |
PTS [32..30] |
3 |
bslbf
|
marker_bit |
1 |
bslbf |
PTS[29..15] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
PTS[14..0] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
} |
|
|
if(PTS_DTS_flags =='11'){ |
|
|
'001 1' |
4 |
bslbf |
PTS[32..30] |
3 |
bslbf |
marker_bit
|
1 |
bslbf |
PTS[29..15] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
PTS[14..0] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
'0001' |
4 |
bslbf |
PTS[32..30] |
3 |
bslbf |
marker_bit |
1 |
bslbf |
PTS[29..15] |
15 |
bslbf |
marker_ bit |
1 |
bslbf |
PTS[14..0] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
} |
|
|
if(ESCR_flag =='1' ){ |
|
|
予約済み |
2 |
bslbf |
ESCR_base[ 32..30] |
3 |
bslbf |
marker_bit |
1 |
bslbf |
ESCR_base[29..15] |
15 |
bslbf
|
marker_bit |
1 |
bslbf |
ESCR_base[14..0] |
15 |
bslbf |
marker_bit |
1 |
bslbf |
ESCR_extension |
9 |
uimsbf |
marker_bit |
1 |
bslbf |
} |
|
|
if(ES_rate_flag =='1'){ |
|
|
marker_bit |
1 |
bslbf |
ES_rate |
22 |
uimsbf |
marker_bit |
1 |
bslbf |
} |
|
|
if (DSM_trick_mode_flag =='1'){ |
|
|
trick_mode_control | 3 |
uimsbf |
if (trick_mode_control = =fast_forward ) { |
|
|
field_id |
2 |
bslbf |
intra_slice_refresh |
1 |
bslbf |
frequency_truncation |
2 |
bslbf |
} |
|
|
else if (tric_mode_control = = throw_motion ) { | |
|
rep_cntrl |
5 |
uimsbf |
} |
|
|
else if (trick_mode _control = =ize_frame ) { |
|
|
field_id |
2 |
uimsbf |
予約済み
|
3 |
bslbf |
} |
|
|
else if (tric_mode _control = = fast_reverse ) { |
|
|
field_id |
2
|
bslbf |
intra_slice_refresh |
1 |
bslbf
|
frequency_truncation |
2 |
bslbf |
else if (tric_mode_control = = throw_reverse) { |
|
|
rep_cntrl
|
5 |
uimsbf |
} |
|
|
else |
|
|
予約済み |
5 | bslbf |
} |
|
|
if (Additional_copy_info_flag = ='1'){ |
|
|
marker_bit |
1 |
bslbf |
Additional_copy_info |
7 |
bslbf |
} |
|
|
if (PES_CRC_flag=='1'){ |
|
|
previous_PES_packet_CRC |
16 |
bslbf |
} |
|
|
if ( PES_extension_flag =='1') { |
|
|
PES_private_data_flag |
1 |
bslbf |
pack_header_field_flag |
1 |
bslbf |
program_packet_sequence_counter_flag |
1 |
bslbf |
P-STD_buffer_flag |
1 |
bslbf
|
予約済み |
3 |
bslbf |
PES_extension_flag_2 |
1 |
bs lbf |
if(PES_private_data_flag =='1'){ |
|
|
PES_private_data |
128 |
bslbf |
} |
|
|
if (pack_header_field_flag == '1'){ |
|
|
pack_field_length | 8 |
uimsbf |
pack_header() |
|
|
} |
|
|
if (program_packer_sequence_counter_flag == '1'){ |
| |
marker_bit |
1 |
bslbf |
program_packet_sequence_counter |
7 |
uimsbf |
マーカービット |
1 |
bslbf |
MPEG1_MPEG2_indentifier |
1 |
bslbf |
original_stuff_length |
6 |
uimsbf |
} |
|
|
if (P-STD_buffer_flag = = '1' ({ |
|
|
'01' |
2 |
bslbf |
P-STD_buffer_scale |
1 |
bslbf |
P-STD_buffer_size |
13 |
uimsbf |
} |
|
|
if (PES_extension_flag_2 == '1'{ |
|
|
marker_bit |
1 |
bslbf |
PES_extension_field_length |
7 |
uimsbf |
for(i=0;i |
|
|
予約済み |
8 |
bslbf |
} |
|
|
} |
|
|
} |
|
|
for (i=0;i |
|
|
stuffing_byte |
8 |
bslbf |
} |
|
|
for (i=0;i |
|
|
PES_packet_data_byte |
8 |
bslbf |
} |
|
|
} |
| |
else if (stream_id = =プログラムストリームマップ |
|
|
|| stream_id = = private_stream_2 |
|
|
| | stream_id = = ECM |
|
|
|| stream_id = = EMM |
|
|
|| ストリーム ID = = プログラムストリームディレクトリ |
|
|
|| stream_id = = DSMCC_stream
|
|
|
|| stream_id = = ITU-T Rec. H.222.1 タイプ E ストリーム ){
|
|
|
for (i=0;i
|
|
|
PES_packet_data_byte |
8 |
bslbf |
}
|
|
|
}
|
|
|
else if (steam_id = = padding_stream){
|
|
|
for (i=0;i
|
|
|
padding_byte |
8 |
bslbf |
}
|
|
|
}
|
|
|
}
|
|
|
その中には:
表 2-18 Stream_id の割り当て
stream_id |
注 |
ストリームエンコーディング |
1011 1100 |
1 |
program_stream_map (0xBC)
|
1011 1101 |
2 |
private_stream_1(0xBD) |
1011 1110 |
|
padding_stream(0xBE) |
1011 1111 |
3 |
private_stream-2(0xBF) |
110x xxxx |
| GB/T XXXX.3 または GB/T AAAA.3オーディオストリーム番号 xxxx(0xC0~0xDF) |
1110 xxxx
|
|
GB/T XXXX.2 または GB/T AAAA.2 ビデオストリーム番号 )
| 1111 0000
3 |
ECM_stream(0xF0) |
|
1111 0001
3 |
EMM_stream(0xF1) |
|
1111 0010
5 |
GB/T XXXX.1 付録 B または GB/T XXXX.6_DSMCC_stream(0xF2) |
|
1111 0011
2 |
ISO/IEC_135 22_ストリーム(0xF3) |
| 1111 0100
6 |
ITU-T Rec.222.1 タイプ A |
|
1111 0101
6 |
ITU-T Rec. H .222.1 タイプ B | |
1111 0110
6 |
ITU-T Rec.222.1 Type C |
|
1111 1
6 |
ITU-T Rec. 222.1 タイプ D |
|
1111 1000
6 |
ITU-T Rec. 1001 |
7 |
ancill ary_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 で指定されている固有の構文があります 。
private_stream_1 および ISO/IEC_13352_stream タイプの 2 つの PES パケットは、GB/T XXXX.2 および GB/T XXXX.3 オーディオ ストリームと同じ PES パケット構文に従います。
3 private_stream_2、ECM_stream、および EMM_stream タイプの PES パケットは、PES_packet_length フィールドの後に構文が指定されていないことを除いて、private_stream_1 と似ています。
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 は、パケットの開始を識別するパケット開始コードを構成します。これは、値「0000 0000 0000 0000 0000 0001」(0x000001) のビット文字列です。
ストリーム識別フィールドstream_id
プログラムストリームにおいて、基本ストリームの番号と種類を指定する。定義については、表 2-18 を参照してください。トランスポート ストリームでは、表 2-18 で定義されているエレメンタリ ストリーム タイプを正しく記述する任意の有効な値に設定できます。トランスポートストリームにおいては、エレメンタリストリームの種類は2.4.4の番組固有情報で規定される。
PESパケット長フィールド PES_packet_length
16 ビットのフィールド。PES パケット内のこのフィールドに続くバイト数を示します。値 0 は、PES パケット長が未指定または無制限であることを示します。これは、ペイロードにトランスポート ストリーム パケット内のビデオエレメンタリ ストリームの 1 つからのバイトが含まれる PES パケットでのみ許可されます。
PESスクランブル制御フィールド PES_scrambling_control
PES パケット ペイロードのスクランブル方式を示す 2 ビットのフィールド。 PES 層でスクランブルが発生する場合、PES パケット ヘッダー (存在する場合はオプション フィールドも含む) はスクランブルされません (2-19 を参照)。
PESPriorityフィールド PES_priority
PESパケット内のペイロードの優先順位を示す1ビットのフィールド。 「1」は、PES パケット内のペイロードが、このフィールドが「0」に設定されている PES パケットのペイロードよりも高い優先順位を持っていることを示します。マルチプレクサはこのフィールドを使用して、エレメンタリ ストリーム内のデータに優先順位を付けることができます。トランスポート メカニズムはこのフィールドを変更しないでください。
データアライメントインジケータフィールド data_alignment_indicator
1 ビットのフラグ。 「1」に設定すると、data_alignment_indicator 記述子がある場合、PES パケット ヘッダーの後に、2.6.10 の 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 グループ ヘッダーに表示されます。 、PTS フィールド PES パケット ヘッダーには、DTS フィールドも表示されません。値「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」に設定すると、PES パケット ヘッダーに CRC フィールドが表示されることを示し、値「0」はそのようなフィールドがないことを示します。
PES拡張フラグフィールド PES_extension_flag
1ビットのフラグ。 「1」に設定すると、PES パケット ヘッダーに拡張フィールドがあることを示し、値「0」はそのようなフィールドがないことを示します。
PESヘッダーデータ長フィールド PES_header_data_length
8ビットフィールド。 PES パケット ヘッダーに含まれるオプション フィールドとパディング バイトによって占有される合計バイト数を示します。このフィールドの前のバイトは、オプションのフィールドが存在するかどうかを示します。
マーカー ビット フィールド marker_bit
値が「1」の 1 ビット フィールド。
タイムスタンプフィールドPTSを表示
プレゼンテーション時間とデコード時間の関係は次のとおりです: PTS は 3 つの個別のフィールドでエンコードされた 33 ビットの数値です。システムターゲットデコーダにおけるエレメンタリストリームnのk番目のプレゼンテーションユニットのプレゼンテーション時刻tpn(k)を示す。 PTS の値は、システム クロック周波数 (つまり 90 kHz) の 1/300 の単位です。表示時間は式 2-11 に従って PTS によって計算されます。プレゼンテーション タイムスタンプをエンコードする頻度の制約については、2.7.4 を参照してください。
PTS(k)=((システムクロック周波数×tpn(k)) p 300) % 233 (2-11) その中で、tpn (k)は発表単位Pn(k)の発表時間である。
オーディオの場合、PESグループヘッダーにPTSがある場合、PESグループで始まる最初のアクセスユニットを指します。 PES パケットにオーディオ アクセス ユニットの最初のバイトがある場合、PES パケット内で始まるオーディオ アクセス ユニットが存在します。
ビデオの場合、PESグループヘッダーにPTSがある場合、PESグループで始まる最初のピクチャスタートコードを含むアクセスユニットを指します。 PESグループ内にピクチャスタートコードの最初のバイトがあれば、そのPESグループ内で始まるピクチャスタートコードが存在する。
low_Delayシーケンスのオーディオプレゼンテーションユニット(PU)、ビデオPU、Bピクチャの場合、プレゼンテーション時間tpn(k)はtdn(k)と等しくなければなりません。
non-low_delivery の I ピクチャと P ピクチャの場合、アクセス ユニット (AU) k と k' の間に復号の不連続がない場合、プレゼンテーション時間 tpn(k) は次に送信される I ピクチャと等しくなければなりません。 P ピクチャの復号時間 tdn(k) (2.7.5 を参照)。デコードの不連続またはストリームの終了がある場合、tpn(k) と tdn(k) の差は、最初のストリームが不連続や終了なしで継続した場合とまったく同じになるはずです。
注 1: low_lay シーケンスは、low_lay フラグが設定されたビデオ シーケンスです (GB/T XXXX.2 の 6.2.2.3 を参照)。
オーディオにフィルタリングがある場合、システム モデルはフィルタリングによって遅延が発生しないと想定します。したがって、符号化中に PTS に含まれるサンプルは、復号化中に PTS に含まれるサンプルと同じになります。スケーラブルなエンコーディングについては、2.7.6 を参照してください。
タイムスタンプ フィールド DTS のデコード
DTS は、3 つの個別のフィールドでエンコードされた 33 ビットの数値です。システムターゲットデコーダにおけるエレメンタリストリームnのj番目のプレゼンテーションユニットの復号時刻tdn(j)を示す。 DTS の値は、システム クロック周波数 (つまり 90 kHz) の 1/300 の単位です。デコード時間は、式 2-12 に従って DTS によって計算されます:
DTS(j)=((system_lock_frequency×tdn(j)) p 300) % 233 -12)
ここで、tdn(j)はアクセスユニットAn(j)の復号時間である。
ビデオの場合、PESパケットヘッダーにDTSがある場合、PESパケットで始まる最初のピクチャスタートコードを含むアクセスユニットを指します。 PESグループ内にピクチャスタートコードの先頭バイトが存在する場合、ピクチャスタートコードはPESグループ内で開始される。
スケーラブルなエンコーディングについては、2.7.6 を参照してください。
ESCR フィールド ESCR_base、ESCR_extension
42 ビット フィールド、2 つの部分にエンコードされます。最初の部分は 33 ビットの長さのフィールドであり、その値 ESCR_base(i) は式 2-14 で与えられます。2 番目の部分は 9 ビットの長さのフィールドで、その値 ESCR_ext(i) は与えられます。式 2-15 によって計算されます。 ESCR フィールドは、エレメンタリ ストリームの ESCR_base の最後のビットを含むバイトが PES-STD 出力に到着するまでの予想時間を示します (2.5.2.4 を参照)。
特に
ESCR(i)=ESCR_base(i)×300+ESCR_ext(i) (2-13)
その内:
ESCR_base(i )=((システムクロック周波数×t(i)) p 300) % 233クロック周波数 × t(i)) p 1) % 300 (2-15) ESCRおよび ES_rate フィールド (すぐ下のセマンティクスを参照) には、PES ストリーム シーケンスに関連するタイミング情報が含まれます。これらのフィールドは、2.7.3 で定義された制約を満たさなければなりません。 基本ストリーム レート フィールド ES_rate22 ビットの符号なし整数。 PES ストリームの場合、システムのターゲット デコーダが PES パケットを受信するレートを示します。このフィールドは、新しい ES_rate フィールドに遭遇するまで、それが属する PES パケット内、および同じ PES ストリームの後続の PES パケット内で有効です。このフィールドの値は 50 バイト/秒単位であり、0 にすることはできません。このフィールドは、PES ストリームのバイトが P-STD 入力に到着する時間を定義するために使用されます (2.5.2.4 の定義を参照)。このフィールドでエンコードされた値は、PES パケット間で異なる場合があります。
トリックモード制御フィールドtrick_mode_control
3ビットフィールド。これは、関連するビデオ ストリームに適用されるスタント モードを表します。他のタイプのエレメンタリ ストリームの場合、このフィールドとそれに続く 5 ビットの意味は定義されていません。トリックモード状態の定義については、2.4.2.3 のトリックモードのセクションを参照してください。 GB/T XXXX.2 ビデオの場合、trick_mode ステータスが false の場合、デコード プロセスによって出力されるプログレッシブ シーケンスの各フレームの番号 N は、repeat_first_field および top_field_first フィールドによって指定されます。 GB/T AAAA.2 ビデオの場合、シーケンス タイトルによって決まります。
インターレース シーケンスの場合、trick_mode ステータスが false の場合、GB/T XXXX.2 ビデオの場合、N の回数は、repeat_first_field および progressive_frame フィールドによって指定されます。
trick_mode ステータスが true の場合、画像の再生回数は値 N に依存します。
表 2-20 スタントモード制御値
値 | 説明 |
'000' | 早送り |
'001'
| スローモーション |
'010' | フリーズフレーム |
'011' | クイック巻き戻し |
'100' | ゆっくりしてください
|
'101'-'111' | 予約済み |
発生 フィールド値が変化するか、スタント モードの動作が停止すると、次の状況の組み合わせが発生する可能性があります。 L デコードが連続的でない。トリック モードの場合、デコードとプレゼンテーションの非標準速度により、ビデオ エレメンタリ ストリーム データで定義されている一部のフィールドの値が正しくなくなる可能性があります。同様に、フラグメント構造に対するセマンティック制約も無効になる可能性があります。これらの例外に関係するビデオ構文要素は次のとおりです。 l field_sequence;l subcarrier;l Burst_amplitude;l subcarrier_phase; トリックモードでは、デコーダーはこれらのフィールドでエンコードされた値に依存すべきではありません。 この標準では、デコーダーが Trick_mode_control フィールドをデコードできる必要はありません。ただし、このフィールドをデコードできるデコーダは、次の標準要件を満たさなければなりません。
早送り
trick_mode_controlフィールドの値「000」を早送りします。この値が存在する場合、それは早送りビデオ ストリームを表し、PES パケット ヘッダー内の次の 5 ビットの意味を定義します。 intra_slice_refresh ビットは、マクロブロックが欠落している可能性があることを示すために「1」に設定されます。デコーダは、マクロブロックを、以前にデコードされたピクチャ内の同じ位置に置き換えることができます。表 2-21 で定義されている field_id フィールドは、どのフィールドを表示するかを示します。 frequency_truncation フィールドは、含まれる可能性のある係数の制限されたセットを示します。このフィールド値の意味を表 2-22 に示します。
スローモーション 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 回表示されます。 フリーズフレーム trick_mode_controlフィールドの値「010」。この値が表示される場合、それはフリーズ フレーム ビデオ ストリームを表し、PES パケット ヘッダー内の次の 5 ビットの意味を定義します。表 2-21 で定義されている field_id フィールドは、どのフィールドを表示する必要があるかを示します。 field_id フィールドは、PES パケットに 0 ペイロード バイトが含まれていない限り、このフィールドを含む PES パケットで始まる最初のビデオ アクセス ユニットを示します。後者の場合、field_id フィールドは、直前のビデオ アクセス ユニットを示します。 ファストリバース
trick_mode_controlフィールドの値「011」。この値が存在する場合、それは巻き戻しビデオ ストリームを表し、PES パケット ヘッダー内の次の 5 ビットの意味を定義します。 intra_slice_refresh ビットは、マクロブロックが欠落している可能性があることを示すために「1」に設定されます。デコーダは、マクロブロックを、以前にデコードされたピクチャ内の同じ位置に置き換えることができます。表 2-21 で定義されている field_id フィールドは、どのフィールドを表示するかを示します。 frequency_truncation フィールドは、含まれる可能性のある係数の制限されたセットを示します。このフィールド値の意味を表 2-22「係数選択値」に示します。
スローリバース 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 フィールド制御値
値 |
説明 |
'00' |
上から下へのみ再生 |
'01' |
ボトムアップのみ再生 |
'10' |
すべてのフレームを再生 |
'11' |
予約済み |
映画内参照フィールドintra_slice_refresh
1ビットフラグ。 「1」に設定すると、PES パケットの符号化されたビデオ データに欠落したマクロブロックがある可能性があることを示し、「0」に設定すると、上記の状況が発生しない可能性があることを示します。詳細については、GB/T XXXX.2 を参照してください。デコーダは、失われたマクロブロックを、以前にデコードされたピクチャ内の同じ位置にあるマクロブロックと置き換えることができます。
周波数切り捨てフィールドfrequency_truncation
2ビットフィールド。 PES パケット内のデータをエンコードするときに、制限された係数セットが使用される可能性があることを指摘します。その値は表 2-22 で定義されています。
表 2-22 係数選択値
値 |
説明 |
'00' |
DC係数のみ非0です |
'01 ' | 最初の 3 つの係数のみが 0 ではありません |
'10' |
最初の 6 つの係数のみが 0 ではありません |
'11' |
すべて係数は 0 以外の場合もあります
|
表示回数制御フィールド rep_cntrl
インターレース画面の各フィールドの表示回数、またはプログレッシブ画面の表示回数を示す5桁のフィールド。インターレースピクチャの場合、トップフィールドとボトムフィールドのどちらを最初に表示するかは、ビデオシーケンスヘッダーのtrick_mode_controlフィールドとtop_field_firstフィールドの関数です。このフィールドの値を「0」にすることはできません。
追加の著作権情報フィールドAdditional_copy_info
著作権情報に関連する特別なデータを含む 7 ビットのフィールド。
previous PESpacket CRCフィールドprevious_PES_packet_CRC
16ビットフィールド。このフィールドには、前の PES パケット (その PES パケットのヘッダーを除く) を処理した後にデコーダの 16 個のレジスタに 0 出力を生成する CRC 値が含まれています。この CRC 値は、付録 A で定義されているものと似ていますが、次の多項式を持ちます:
x16+x12+x5+1
注 2: この CRC 値は、ネットワークのメンテナンス用です。エラーは分離されており、エレメンタリ ストリーム デコーダによる使用は意図されていません。 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 グループを繰り返すことはできません。したがって、複合プログラム内の 2 つの連続する 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=P-STD_buffer_size×128 (2-16)
else
BSn =P -std_buffer_size×1024
PES拡張フィールド長フィールド PES_extension_field_length 7ビットフィールド。 PES 拡張フィールドのこのフィールドに続く、予約されたバイトまでのデータの長さをバイト単位で指定します。
スタッフィングバイトフィールドstuffing_byte定数値「1111 1111」を持つ8ビットフィールド。チャンネルなどのニーズに合わせてエンコーダーで挿入可能。デコーダはこのフィールドを破棄します。 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_byte8ビットフィールド、その値は定数「1111 1111」です。このフィールドはデコーダによって破棄されます。
PS ストリーム形式と分析の概要の詳細については、PHP 中国語 Web サイトの関連記事に注目してください。
|