1.基本的な考え方
1、GOP
GOP(Group of Picture)は、Iフレームと複数のB / Pフレームで構成される連続画像のグループであり、コーデックアクセスの基本単位です。GOP構造で一般的に使用される2つのパラメータMとN。MはGOPの最初のPフレームとIフレームの間の距離を指定し、NはGOPのサイズを指定します。
GOP内のフレームのグループは、強く相関しているフレームのグループです。つまり、フレーム間の差は小さいです。
クローズドGOP:クローズドGOPは、このGOP内の画像を参照するだけでよく、前後のGOPのデータを参照する必要はありません。このモードは、閉じたGOPの表示シーケンスが常にIフレームで始まり、Pフレームで終わることを決定します。
開いたGOP :開いたGOPのBフレームは、前のGOPまたは次のGOPフレームの一部を使用してデコードできます。Open GOPは、コードストリームにBフレームが含まれている場合にのみ表示されます。
オープンGOPとクローズドGOPにおけるIフレーム、Pフレーム、Bフレームの依存関係を次の図に示します。
2. I / B / Pフレーム
- Iフレーム(イントラフレーム):キーフレーム、イントラフレーム圧縮技術を使用して、IDRフレームはGOPの最初のフレームであり、Iフレームに属します
- Pフレーム(前方予測フレーム):前方参照フレームは、圧縮時に、フレーム間圧縮技術を使用して、以前に処理されたフレームのみを参照し、Iフレームの半分を占めます。
- Bフレーム(双方向予測フレーム):双方向予測フレーム。圧縮する場合、前に処理されたフレームと後続のフレームの両方を指します。フレーム間圧縮技術は、Iフレームの1/4しか占めません。
IDRフレーム(瞬時デコード更新)デコーダーは、フレームをすぐに更新します。機能は次のとおりです。
- IDRフレームに遭遇するたびに、デコーダーはデコーダー参照バッファーのコンテンツをクリアします。
- 各GOPの最初のフレームはIDRフレームです
- IDRフレームは特別なIフレームです
図に示すように、GOPの最初のフレームはIDRフレームです。通常、Pフレームは隣接する前のIフレームまたはPフレームのみを参照し、Bフレームは隣接する前のI / Pフレームと次のフレームを参照できます。 I / Pフレームであり、BフレームとBフレームの間に参照関係はありません。
3.SPSおよびPPS
- SPS(シーケンスパラメータセット):シーケンスパラメータセット。seq_parameters_set_id、フレーム番号、POC(Picture Order Count)制約、参照フレーム番号、デコードされた画像サイズ、フレームフィールドコーディングモードなど、一連のビデオ画像(GOP)に作用します。選択フラグ待機
- PPS(画像パラメータセット):ビデオシーケンス内の画像に作用する画像パラメータセット、picture_parameters_set_id、エントロピーコーディングモード選択フラグ、スライスグループの数、初期量子化パラメータ、非ブロック化フィルタ係数調整フラグなど。
パラメータセットは独立したデータユニットであり、パラメータセット外の他の構文要素に依存しません。パラメータセットは特定の画像やシーケンスに対応していません。同じシーケンスパラメータセットを複数の画像パラメータセットで参照できます。同様に、同じ画像パラメータセットを複数の画像で参照することもできます。パラメータセットの内容を更新する必要があるとエンコーダが判断した場合にのみ、新しいパラメータセットが発行されます。
2.H.264圧縮技術
-
フレーム内圧縮技術:空間データの冗長性を排除します
-
フレーム間圧縮技術:時間領域のデータ冗長性を排除します
-
整数離散コサイン変換(DCT):時間領域の相関を周波数領域の無関係なデータに変換して量子化します。
-
CABAC圧縮
1.画像分割
H.264 / AVCコーディングはマクロブロック(マクロブロック)の基本単位であるため、予測画像は最初から分割されます。以下に示すように:
(1)スライス
H.264 / AVCは、画像を1つまたは複数のスライスに細かく分割します。スライスは、一連のマクロブロックで構成されます。各スライスは自己完結型です。FMOを使用しない場合、画像はラスタースキャンの順序でスライスに分割されます。FMOを使用する場合、画像はいくつかのスライスグループに分割され、各スライスグループには複数のスライスが含まれます。(ほとんどの場合、画像はスライスに分割されます)
スライスのさまざまなエンコードタイプに応じて、次のようにいくつかのタイプのスライスがあります。
- Iスライス:スライス内のすべてのマクロブロックは、フレーム内予測によってコード化されます。IスライスにはIマクロブロックしかありません。
- Pスライス:スライス内マクロブロックは、フレーム内予測またはフレーム間予測でコーディングできますが、各予測ブロックには最大で1つの動き補償信号があります。Pスライスには、IマクロブロックとPマクロブロックを含めることができます。
- Bスライス:Pスライスのコーディングタイプに加えて、フレーム間予測コーディングを使用するマクロブロックを使用でき、各予測ブロックは2つの動き補償信号を持つことができます。Bスライスには、Iマクロブロック、Pマクロブロック、およびBマクロブロックを含めることができます。
- SPスライス:Pスライスを切り替えます。
- SIスライス:スイッチIスライス。
(2)マクロブロック
- マクロブロックは、ビデオ圧縮用のH.264の基本単位です。
- フレーム間圧縮であろうとフレーム内圧縮技術であろうと、マクロブロックは基本単位です
- H.264は、デフォルトで16x16の領域をマクロブロックとして使用し、8x8のサイズに分割することもできます。
H.264は、比較的フラットな画像に16X16マクロブロックを使用します。ただし、より高い圧縮率を実現するために、より小さなサブブロックを16X16マクロブロックに分割することもできます。サブブロックのサイズは8X16、16X8、8X8、4X8、8X4、4X4で、非常に柔軟です。
マクロブロックは、Iマクロブロック、Bマクロブロック、Pマクロブロックに分けられます。
- Iマクロブロックは、同じフレーム内の隣接するコード化されたサンプルを介してフレーム内予測を実行します。
- Pマクロブロックは、予測のためにすでにコーディングされているマクロブロックパーティションを指します。
- Bマクロブロックは、予測のために1つまたは2つのコード化されたマクロブロックパーティションを参照します。
2.フレーム内圧縮技術
フレーム内予測は、フレームにコード化されたサンプルに基づいて現在のサンプルの予測値を計算し、現在のサンプル値から予測値を差し引いて残差値を取得することです。目的は、送信されたデータ。
H.264 / AVCは、画像をより細かい粒度のスライスに分割します。このため、Iマクロブロック予測は、同じスライス内のすでにコード化されたサンプルのみを参照します。マクロブロック内の隣接するサンプル間にも高度な相関関係があります。マクロ内ブロック予測は、さらに小さな予測ブロックに分割できます。
輝度サンプルの場合、各マクロブロックは4 x4ピクセルと16x16ピクセルの2種類の予測ブロックに分割できます。前者には9つの予測モードがあり、後者には4つの予測モードがあります。前者はより詳細な画像で領域を予測するのに適しており、後者はより滑らかな画像で領域を予測するのに適しています。フレーム内予測では、左側と上部のコード化されたサンプルを参照する必要があります。スライスの自己完結を確実にするために、フレーム内予測はスライスにまたがりません。彩度サンプルの場合、各マクロブロックには8 x8ピクセルの彩度予測ブロックがあります。
4x4輝度サンプルの場合、以下に示すように、9つの予測モードがあります。
ここで、AMはコード化された輝度サンプル値です。
16x16輝度予測ブロックの場合、4つの予測モードがあります。最初の3つは4 x 4モードと同じで、次のようにモード3のみがそれ自体に固有です。
- 0(垂直)
- 1(水平)
- 2(DC)
- 3(平面)
8x8のコロマ予測ブロックの場合、16x16の輝度予測ブロックと同様に、4つのモードに分割されます。
H.264イントラ予測のいくつかのモードの具体的な計算については、wikiを参照してください。
3.フレーム間圧縮技術
相互予測は、以前にエンコードおよび送信された画像(参照画像)に基づいて、輝度および彩度サンプルのブロックを予測するプロセスです。以前にエンコードまたは送信された参照画像は、参照フレームと呼ばれます。フレーム間圧縮は、同じGOP内のフレーム間で実行されます。次のテクノロジが含まれています。
- 動き推定(マクロブロックマッチング+動きベクトル)
- 動き補償(デコード)
ビデオブレの原因:GOPでフレーム損失があると、デコード終了時の画像にエラーが発生し、モザイク(ぼやけた画面)が表示されます。
ビデオジャムの理由:ブレの発生を回避するために、フレーム損失があることが判明した場合、次のIDRフレームが更新されるまで、GOP内のすべてのフレームが破棄されます。Iフレームはフレーム周期に応じて表示されます。次のIフレームが表示される前に後続の画像が表示されない場合、ビデオは静止しているため、ビデオがフリーズします。
4.可逆圧縮
DCT変換
CABAC
5.コーデックプロセス
3、H.264ストリーム構造
1.NALおよびVCL
NALレイヤー(ネットワーク抽象化レイヤー):ネットワーク抽象化レイヤー。主にネットワーク伝送に使用されます。特定のフォーマットに従って、ビデオエンコーディング層によって出力されたデータはパッケージ化およびカプセル化され、ヘッダーなどの情報は、異なる速度のネットワーク上での送信または保存のために提供されます。
VCLレイヤー(ビデオコーディングレイヤー):主にデータコーディングに使用されるビデオコーディングレイヤー
2.コードストリームの基本概念
- SODB(String Of Data Bits)元のデータビットストリーム(バイナリデータ文字列)。VCLレイヤーによって生成されます。長さは必ずしも8の倍数ではないため、入力する必要があります。
- RBSP(Raw Byte Sequence Payload):SODB +末尾ビット、つまり、SODBの最後のバイトが整列されていない場合は、1と0より大きい値を追加します。
- NALU:NALヘッダー(1B)+ RBSP
スライス(スライス)とマクロブロック(マクロブロック):
3.ストリームの階層化
Annexb形式:ファイルに保存し、NALユニットの前に開始コードを追加します
RTP形式:ネットワーク伝送に使用されます
四、SPS / PPS /スライスヘッダー
1、SPS
H.264プロファイル:ビデオ圧縮機能の説明。プロファイルが高いほど、より高度な圧縮機能が使用されます。
プロファイルは、メインプロファイルとベースラインプロファイルの2つのタイプに分けられます。どちらも制約付きベースラインに基づいています。メインプロファイルは、次のタイプに拡張できます。
H.264レベル:ビデオの説明、レベルが高いほど、ビデオのビットレート、解像度、およびfpsが高くなります。
解決:
フレーム関連:
- フレーム数log2_max_frame_num_minus4(GOPの最大フレーム数)
- 参照フレームの数:max_num_ref_frames(バッファサイズ)
- 表示フレーム番号:pic_order_cnt_type(表示順序)
- フレームレートの計算
2、PPS
3、スライスヘッダー
- フレームタイプ(I / P / Bフレーム)
- GOPでのフレーム番号のデコード
- 予測重量
- フィルタ