ホームページ  >  記事  >  ウェブフロントエンド  >  PSストリームのフォーマットと解析の概要

PSストリームのフォーマットと解析の概要

高洛峰
高洛峰オリジナル
2017-02-15 09:43:154449ブラウズ

PS ストリームについては、最近仕事の必要があり、MPEG2 での PS ストリームの形式と解凍プロセスを研究しました。

まず、PS パケット ストリームの形式を知る必要があります:

H264 に対して次の PS カプセル化を実行します: 通常、各 IDR NALU には SPS、PPS などの NALU が含まれるため、SPS、PPS、およびIDR は、PS パッケージに ps ヘッダーが含まれ、その後 PS システム ヘッダー、PS システム マップ、PES ヘッダー + h264 生データが追加されるようにカプセル化されます。したがって、IDR NALU PS パケットの外側から内側への順序は、PSheader | PS system Map h264 raw data | になります。他の非キー フレーム PS パケットの場合は、PS ヘッダーと PES ヘッダーを直接追加するだけです。順序は、PS ヘッダー | PES ヘッダー | h264raw データです。上記はビデオのみの場合で、音声を PS パッケージにパッケージ化することもできます。音声データがある場合は、データにPESヘッダーを追加し、ビデオPESの後に配置します。シーケンスは次のとおりです: PS パケット = PS ヘッダー (ビデオ) | PES (オーディオ)、次に RTP を使用してカプセル化して送信します。

上記はデータ ストリームの全体的なカプセル化形式です。各カプセル化の各部分を見てみましょう:

PS流的格式和解析总结

最初の部分は PSheader 部分です: (MPEG2 標準中国語ドキュメントより)

15bslbf marker_bit1bslbf System_ Clock_reference_base[14.. 1 bslbf System_ Clock_reference_extension9uimsbf marker_bit1bslbfprogram_mux_rate 22. ️ system_header() } }
構文

数字

ニーモニック

pack_header() {

パックスタートコード

32

bslbf

f

System_ Clock_reference_base[32..30]

3

bslbf

marker_bit

1

bslbf

System_ Clock_reference_base[29..15]

marker_bit

1

bslbf

予約済み

5

bslbf

Pack_stuffing_length

3

uimsbf

for (i=0;i

if (nextbits()==system_header_start_code) {

プログラムストリームパケット(PSヘッダー)の各フィールドの意味定義:

パックスタートコードフィールドpack_start_code

値が「0000 0000 0000 0000 0000 0001 1011 1010」であるビット列(0x000001BA) )、中古パッケージの始まりをマークします。

システム クロック リファレンス フィールド system_lock_reference_basesystem_ Clock_reference_extenstion

システム クロック リファレンス (SCR) は、2 つの部分でエンコードされた 42 ビットのフィールドです。最初の部分 system_lock_reference_base は 33 ビットの長さのフィールドであり、その値 SCR_base(i) は式 2-19 で与えられます。 2 番目の部分 system_lock_reference_extension は 9 ビットの長さのフィールドで、その値 SCR_ext( i) は式 2-20 で与えられます。 SCR フィールドは、ESCR_base の最後のビットを含むエレメンタリ ストリーム内のバイトがプログラムのターゲット デコーダの入力に到着するまでの予想時間を示します。

SCRフィールドのエンコード周波数要件については、2.7.1を参照してください。

マーカー ビット フィールド mark_bit

1 ビット フィールド、値 '1'。

プログラム複合レートフィールドprogram_mux_rate

このフィールドを含むパケット中にP-STDがプログラムストリームを受信するレートを指定する22ビット整数。その値は 50 バイト/秒の単位です。値 0 は許可されません。このフィールドで表される値は、2.5.2 の P-STD 入力でのバイト到着時間を定義するために使用されます。このフィールドの値は、この規格における番組多重複合ストリームのパケットごとに異なる場合がある。

パックスタッフィング長フィールドpack_stuffing_length

3桁の整数で、このフィールドの後のスタッフィングバイト数を指定します。

スタッフィングバイトフィールドstuffing_byte

8ビットフィールド、値は常に「1111 1111」です。このフィールドは、たとえばチャネル要件を満たすために、エンコーダによって挿入できます。デコーダによって破棄されます。各パケット ヘッダーでは最大 7 バイトのパディング バイトのみが許可されます。

その定義されたバイト順序は次のとおりです:

バイト0バイト 1バイト 2 バイト 376543 21077

5

4

3

2

1

0

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

0000 0000 0000 0000 0000 0001スタートコード

1011 1010パック識別子

PACK 識別子 -- 0xBA

システム クロック リファレンス (SCR-System Clock Reference) の基本部分 SCR の拡張部分:

543210711

バイト 4

バイト5

バイト6

バイト7

バイト8

バイト9

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

0 1

SCR 32..30

1

SCR 29..15

1

SCR 14..00

SC R_ext

PS再利用率:

Program_Mux_Rate予約済みpack_stuffing_length

================================================ === =============

次に、PSシステムヘッダー(つまり、PSシステムヘッダー:プログラムストリームシステムヘッダー)部分の定義を見てみましょう: (MPEGより) -2標準文書)

表2-34 プログラムストリームシステムタイトル

バイト10

バイト11

バイト1 2

バイト13

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

1

1

uimsbf 2bslbf

言語メソッド

桁数

ニーモニック

system_header() {

System_header_start_code

32

bslbf

header_length

16

uimsbf

marker_bit

1

uimsbf

marker_bit

1

bslbf

audio_bound

6

uimsbf

fix_flag

1

bslbf

CSPS_flag

1

bslbf

System_audio_lock_flag

1

bslbf

system_video_lock_flag

1

bslbf

marker_bit

1

bslbf

vedio_bound

5

uimsbf

packet_rate_restriction_flag

1

bslbf

reserved_bits

7

bslbf

while (nextbits()=='1') {

stream_id

8

P-STD_buffer_bound_scale

1

bslbf

P-STD_buffer_size_bound

13

uimsbf

}

}

システムヘッダーの各フィールドのセマンティック定義:

システムヘッダー開始コードフィールド system_header_start_code

値は '0000 0000 0000 0000 0000 0001 1011 1011' (0x000001BB) ビット文字列です。システム ヘッダー Start を示します。

ヘッダー長フィールド header_length

16ビットフィールド。このフィールドに続くシステムヘッダーの長さをバイト単位で示します。このフィールドは、この仕様の将来の拡張で拡張される可能性があります。

レート制限フィールド rate_bound

22 ビット フィールド。その値は、プログラム ストリームの任意のパッケージでエンコードされた Program_mux_rate フィールドの最大値以上です。このフィールドは、デコーダがストリーム全体をデコードできるかどうかを推定するために使用できます。

オーディオバウンドフィールド audio_bound

6 ビットフィールド、値は 0 から 32 までの閉じた間隔の整数であり、デコード処理が行われる GB/T XXXX.3 および GB/T 以上です。プログラム ストリーム内で同時にアクティブになります AAAA.3 オーディオ ストリームの最大数。このセクションでは、STD バッファが空でない場合、またはプレゼンテーション ユニットが P-STD モデルで提示されている場合、GB/T XXXX.3 および GB/T AAAA.3 オーディオ ストリームのデコード プロセスがアクティブになります。

固定フラグフィールドfixed_flag

1フラグビット。 「1」に設定すると固定ビット レート動作を示し、「0」に設定すると可変ビット レート動作を示します。固定ビットレート動作中、複合 GB/T XXXX.1 ストリームの system_lock_reference フィールド値は、次の一次式に従います:

SCR_base(i)=((c1×ic2) ) p 300) % 233 (2-22)

SCR_ext(i)=((c1×ic2 ) p 300) % (2- 23)

その中には:

c1 すべての i に対して有効な実定数;

c2 すべての i に対して有効な実数定数;

i GB/T XXXX.1 複合ストリーム内の任意の system_lock_reference フィールドが含まれます。最後の部分。

CSPSフラグフィールド CSPS_flag

1ビットフィールド。 「1」に設定すると、プログラム ストリームは 2.7.9 で定義された制限に準拠します。

システムオーディオロックフラグフィールド system_audio_lock_flag

1ビットフィールド。システム ターゲット デコーダのオーディオ サンプル レートと system_lock_frequency の間に指定された比率があることを示します。 system_ Clock_frequency は 2.5.2.1 で定義され、オーディオ サンプリング レートは GB/T XXXX.3 で指定されます。 system_lock_frequency と実際のオーディオ サンプル レートの比率 SCASR がプログラム ストリーム内のすべてのオーディオ エレメンタリ ストリームのすべてのプレゼンテーション ユニットで一定であり、オーディオ ストリームに示されている標準サンプル レートが以下の表の値と等しい場合、これはフィールドは「1」のみです。

SCASR=(system_ Clock_frequency) / audio_sample_rate_in_the_P-STD (2-24)

X/Y という表記は実数の除算を表します。

標準音声サンプリング周波数(kHz)

16

32

22.05

44.1

24

48

SCASR

27 000 000

--------

16 000

27 000 000

-----

32 000

27 0 000

------

22 050

27 000 000

------

44 100

27 000 000

-----

24 000

27 000 000

--------

48 000

システムビデオロックフラグフィールド system_video_lock_flag

1ビットフィールド。システム ターゲット デコーダのビデオ フレーム レートと system_lock_frequency の間に指定された比率があることを示します。 system_ Clock_frequency は 2.5.2.1 で定義され、ビデオ フレーム レートは GB/T XXXX.2 で指定されます。 system_lock_frequency と実際のビデオ フレーム レートの比 SCFR が、GB/T XXXX.1 のすべてのビデオ エレメンタリ ストリームのすべてのプレゼンテーション ユニットで一定であり、ビデオ ストリームに示されている標準フレーム レートが以下の表の値と等しい場合、このフィールドには「1」のみを指定できます。

SCFR=システムクロック周波数 / frame_rate_in_the_P-STD 76

242529.97305059.94 601 125 0001 080 000 9 00 900900 000540 000450 450450 000

SCFR

1 126 125

比率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)

BSnP-STD_buffer_size_bound×128

else

BSnP-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/)

PS流的格式和解析总结

それでは、解析手順を見てみましょう: (MPEG-2標準ドキュメントより)

表2-17 PESグループ化

PES_scrambling_control 2 bslb fbslbfbslbf

その中には:

表 2-18 Stream_id の割り当て

言語方式

桁数

ニーモニックシンボル

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

bslbf

PES_priority

1

bslbf

data_alignment_indicator

1

著作権

1

オリジナルまたはコピー

1

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

}

}

}

1111 00001111 00011111 0010 1111 00111111 01001111 01011111 01101111 11111 1000program_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 を参照)。

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 ビデオストリーム番号

)

3

ECM_stream(0xF0)

3

EMM_stream(0xF1)

5

GB/T XXXX.1 付録 B または GB/T XXXX.6_DSMCC_stream(0xF2)

2

ISO/IEC_135 22_ストリーム(0xF3)

6

ITU-T Rec.222.1 タイプ A

6

ITU-T Rec. H .222.1 タイプ B

6

ITU-T Rec.222.1 Type C

6

ITU-T Rec. 222.1 タイプ D

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

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)

BSnP-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_byte

8ビットフィールド、その値は定数「1111 1111」です。このフィールドはデコーダによって破棄されます。

PS ストリーム形式と分析の概要の詳細については、PHP 中国語 Web サイトの関連記事に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。