5

私は、4 つのアクセス ユニットを削除して残りのビデオを再生するなど、生のエレメンタリ ストリームのAccess units一部をカットする必要があるプロジェクトで作業しています。H.264

このため、Access unit DelimiterNAL Unit Type:9)を境界としてAccess Unitビデオをカットしましたが、ビデオはパケットロスで終了しました。しかし、境界としてSequence parameter set( NAL Unit type :7) を使用すると、結果のビデオはパケット損失なしで再生されます。
この問題を解決する方法を教えてください: ビデオをどこでカットしますか?

4

2 に答える 2

5

ストリームについてもう少し詳しく説明しなかったため、存在するNALUや、ここでのフォーマット方法など、いくつかの一般的なガイドラインがあります。

SPS/PPS にはフレームのデコード方法に関する情報が含まれているため、常に必要です。Annex B の種類のストリームを受信すると仮定します。この場合、新しい SPS/PPS が来るまで最後の SPS/PPS をキャッシュし、残りの画像を古い画像でデコードしてから、新しい画像を適用します。

AUD NALU を使用している場合は、最後のアクセス ユニットが既に終了しているため、ビデオを簡単に分割でき、多くの操作を行う必要はありません。

さらに深く掘り下げる必要がある場合は、NAL ユニットの順序と、プライマリ コード化された画像の最初の VCL NAL ユニットを検出する方法に関する仕様からの抜粋を次に示します。

ITU-T H.264 (05/2013) より

7.4.1.2.3 NAL ユニットとコード化されたピクチャの順序、およびアクセス ユニットへの関連付け

この節では、NAL ユニットとコード化された画像の順序、および付属文書 A で指定されたプロファイルの 1 つ以上に準拠し、節 2 ~ 9 で指定されたデコード プロセスを使用してデコードされるコード化されたビデオ シーケンスのアクセス ユニットへの関連付けを指定します。

アクセス ユニットは、1 つのプライマリ コード化画像、対応する 0 個以上の冗長コード化画像、および 0 個以上の非 VCL NAL ユニットで構成されます。VCL NAL ユニットのプライマリまたは冗長なコード化された画像への関連付けは、7.4.1.2.5 節で説明されています。

ビットストリームの最初のアクセス ユニットは、ビットストリームの最初の NAL ユニットから始まります。

プライマリ コード化された画像の最後の VCL NAL ユニットの後の次の NAL ユニットのいずれかの最初のものは、新しいアクセス ユニットの開始を指定します。

  • アクセス ユニット デリミタ NAL ユニット (存在する場合)、

  • シーケンスパラメータセットNALユニット(存在する場合)、

  • 画像パラメータ セット NAL ユニット (存在する場合)、

  • SEI NAL ユニット (存在する場合)、

  • 14 ~ 18 の範囲の nal_unit_type を持つ NAL ユニット (存在する場合)、

  • プライマリ コード化された画像の最初の VCL NAL ユニット (常に存在)。

プライマリ コード化ピクチャの最初の VCL NAL ユニットの検出に関する制約は、7.4.1.2.4 節で指定されています。

次の制約は、アクセス ユニット内のコード化されたピクチャと非 VCL NAL ユニットの順序に従うものとします。

  • アクセス ユニット デリミタ NAL ユニットが存在する場合、それは最初の NAL ユニットでなければならない。任意のアクセス ユニットには、最大で 1 つのアクセス ユニット デリミタ NAL ユニットが存在するものとします。

  • SEI NAL ユニットが存在する場合、それらはプライマリ コード化されたピクチャに先行するものとします。

  • バッファリング期間 SEI メッセージを含む SEI NAL ユニットが存在する場合、バッファリング期間 SEI メッセージは、アクセス ユニット内の最初の SEI NAL ユニットの最初の SEI メッセージ ペイロードでなければなりません。

  • プライマリ コード化されたピクチャは、対応する冗長コード化されたピクチャに先行するものとします。

  • 冗長符号化ピクチャが存在する場合、それらはredundant_pic_cntの値の昇順で並べられる。

  • シーケンス パラメータ セット拡張 NAL ユニットが存在する場合、それは、シーケンス パラメータ セット拡張 NAL ユニットと同じ seq_parameter_set_id の値を持つシーケンス パラメータ セット NAL ユニットの次の NAL ユニットでなければなりません。

  • NAL ユニットを分割しない補助コード化ピクチャの 1 つ以上のコード化スライスが存在する場合、それらはプライマリ コード化ピクチャとすべての冗長コード化ピクチャ (存在する場合) に続くものとします。

  • シーケンスの終了 NAL ユニットが存在する場合、NAL ユニット (存在する場合) を分割せずに、プライマリ コード化された画像とすべての冗長なコード化された画像 (存在する場合)、および補助コード化された画像のすべてのコード化されたスライスに続きます。

  • ストリームの終わりの NAL ユニットが存在する場合、それは最後の NAL ユニットでなければなりません。

  • nal_unit_type が 0、12、または 20 ~ 31 の範囲にある NAL ユニットは、プライマリ コード化されたピクチャの最初の VCL NAL ユニットに先行してはなりません。

(注 2 – シーケンス パラメータ セット NAL ユニットまたはピクチャ パラメータ セット NAL ユニットは、アクセス ユニットに存在する場合がありますが、アクセス ユニット内のプライマリ コード化ピクチャの最後の VCL NAL ユニットに続くことはできません。新しいアクセスユニット。)

(注 3 – 7 または 8 に等しい nal_unit_type を持つ NAL ユニットがアクセス ユニットに存在する場合、それが存在するアクセス ユニットのコード化されたピクチャで参照される場合とされない場合があり、参照される場合があります。後続のアクセス ユニットのコード化された画像。)

nal_unit_type が 0、7、8、または 12 ~ 18 の範囲、または 20 ~ 31 の範囲の NAL ユニットを含まないアクセス ユニットの構造を図 7-1 に示します。

7.4.1.2.4 プライマリ コード化ピクチャの最初の VCL NAL ユニットの検出

この節は、付録 A で指定されたプロファイルの 1 つまたは複数に準拠し、デコードを使用してデコードされるコード化されたビデオ シーケンスの各プライマリ コード化された画像の最初の VCL NAL ユニットの検出を可能にするのに十分な、VCL NAL ユニット構文の制約を指定します。条項2~9で指定されたプロセス。

任意のコード化スライス NAL ユニットまたはコード化スライス データ パーティション 現在のアクセス ユニットのプライマリ コード化ピクチャの NAL ユニットは、任意のコード化スライス NAL ユニットまたはコード化スライス データ パーティションとは異なるものとする 前のアクセス ユニットのプライマリ コード化ピクチャの NAL ユニット次のいずれかの方法で:

  • frame_num の値が異なります。この条件をテストするために使用される frame_num の値は、スライス ヘッダーの構文に表示される frame_num の値です。この値は、memory_management_control_operation の存在により、その後のデコード プロセスでの使用のために 0 に等しいと推測されるかどうかに関係ありません。 5に等しい。

(注 1 – 上記のステートメントの結果は、frame_num が 1 に等しいプライマリ コード化されたピクチャは、5 に等しい memory_management_control_operation を含むことができないということです。ただし、その後に続く次のプライマリ コード化されたピクチャ (存在する場合) に対して以下にリストされている他の条件が満たされている場合を除きます。 .

  • pic_parameter_set_id の値が異なります。

  • field_pic_flag の値が異なります。

  • bottom_field_flag は両方に存在し、値が異なります。

  • nal_ref_idc は値が異なり、nal_ref_idc 値の 1 つが 0 に等しい。

  • pic_order_cnt_type はどちらも 0 で、pic_order_cnt_lsb の値が異なるか、delta_pic_order_cnt_bottom の値が異なります。

  • pic_order_cnt_type は両方で 1 に等しく、delta_pic_order_cnt[ 0 ] の値が異なるか、または delta_pic_order_cnt[ 1 ] の値が異なります。

  • IdrPicFlag は値が異なります。

  • IdrPicFlag はどちらも 1 で、idr_pic_id の値は異なります。

(注 2 – 冗長コード化ピクチャ内の VCL NAL ユニットの一部、または非 VCL NAL ユニット (アクセス ユニット デリミタ NAL ユニットなど) の一部は、アクセス ユニット間の境界の検出にも使用される場合があり、したがって、新しい一次符号化画像の開始の検出。)

于 2014-09-24T04:27:56.597 に答える
2

私の知る限り、Access Unit Delimiter は必須ではありません。また、h.264 ストリームには、多くの場合、ストリームの先頭にシーケンス パラメータ セットが 1 つしか含まれていません。

最終ユニット ヘッダー情報だけに基づいて、アクセス ユニットの境界を安全に見つけることはできないと思います。スライス ヘッダーからいくつかの情報を解析する必要があります。パラメータ frame_num はピクチャ、つまりアクセス ユニットを識別しますが、それを解析するには、ビットストリームからさらに多くの情報が必要になる場合があります。

1 つのアクセス ユニットには常に 1 つのスライス (最終ユニット タイプ 1 ~ 5) のみが含まれると仮定して運を試すことができますが、これは標準に完全に準拠していません。

于 2014-09-10T16:32:21.783 に答える