ビデオの基本

基本概念の理解:

圧縮されたフレームは、I フレーム、P フレーム、B フレームに分けられます。

I フレーム: フレーム内圧縮技術を使用したキー フレーム。これは、このフレームの画像が完全に保存されていることと理解できます。このフレームのデータのみがデコードに必要です (完全な画像が含まれているため)。

P フレーム: 前方参照フレーム。圧縮時に、前に処理されたフレームのみを参照します。フレーム オーディオ圧縮技術を使用します。P フレームは、このフレームと前のキー フレーム (または P フレーム) との差分を表します. デコード時には、このフレームで定義された差分を、以前にキャッシュされた画像に重ね合わせて、最終的な画像を生成する必要があります. (つまり、差分フレーム、P フレームは完全な画像データではなく、前のフレームの画像と異なるデータのみ)

B フレーム: 双方向参照フレーム、圧縮時に前のフレームとその後ろのフレームを参照します。フレーム間圧縮技術を使用。B フレームは、現在のフレームと前後のフレームの差分を記録します (詳細はより複雑で、4 つのケースがあります)、つまり、B フレームをデコードするには、前にキャッシュされた画像を取得するだけでなく、また、復号化された画像は、前後の画像を比較することによって得られます。このフレームのデータの重ね合わせにより、最終的な画像が得られます。Bフレームの圧縮率は高いですが、デコードするとCPUが疲れます。

もう 1 つの概念は、IDR フレームです。
シーケンスの最初の画像は IDR 画像 (即時更新画像) と呼ばれ、IDR 画像はすべて I フレーム画像です。H.264 では、デコードの再同期のために IDR 画像が導入されています. デコーダーが IDR 画像をデコードすると、すぐに参照フレーム キューをクリアし、すべてのデコードされたデータを出力または破棄し、パラメーター セットを再度検索して、新しいシーケンスを開始します. このようにして、前のシーケンスで重大なエラーが発生した場合、ここで再同期する機会があります。IDR ピクチャの後のピクチャは、IDR の前のピクチャのデータを使用してデコードされることはありません。IDR ピクチャは I ピクチャでなければなりませんが、I ピクチャは必ずしも IDR ピクチャである必要はありません。シーケンスには多数の I ピクチャが存在する可能性があり、I ピクチャの後のピクチャは、モーション リファレンス用に I ピクチャ間のピクチャを参照できます。

もう 1 つの注意点は、IDR フレームの場合、IDR フレームの後のすべてのフレームは、IDR フレームの前のフレームの内容を参照できないことです.逆に、通常の I フレームの場合、B フレームと A P フレームは、通常の I フレームに先行する I フレーム。ランダム アクセス ビデオ ストリームから、プレーヤーは常に IDR フレームから再生できます。これは、その後のフレームが前のフレームを参照していないためです。ただし、後続のフレームは常に前のフレームを参照するため、IDR フレームのないビデオの任意のポイントから再生を開始することはできません。

もう 1 つの概念、シーケンス (GOP)を追加し続けます:
CodecContext->gop_size パラメータに対応します;
シーケンスは、コンテンツのわずかな違いで画像をエンコードした後に生成される一連のデータ ストリームです。モーションの変化が比較的小さい場合、シーケンスは非常に長くなる可能性があります。これは、モーションの変化が小さいということは、イメージ スクリーンの内容がほとんど変化しないことを意味するため、I フレームを編集してから、P フレームと B フレームを保持することができるからです。動きの変化が多い場合、シーケンスは比較的短くなる場合があります。たとえば、1 つの I フレームと 3 つまたは 4 つの P フレームが含まれます。

GOP はピクチャのグループであり、GOP は連続したピクチャのグループです。
GOP は通常、M=3、N=12 のように 2 つの番号を持ち、M は I フレームと P フレームの間の距離を指定し、N は 2 つの I フレームの間の距離を指定します。次に、現在のGOP構造は

シリアルナンバー フレーム
1 私 BBP BBP BBP BB 私

I フレーム、B フレーム、P フレームにも次のような特徴があります。
I フレームの特徴:

  1. フルフレーム圧縮符号化フレームです。フルフレームの画像情報に対して JPEG 圧縮符号化と送信を実行します。
  2. 完全な画像は、デコード中に I フレームのデータのみで再構成できます。
  3. I フレームは、画像の背景と動く被写体の詳細を記述します。
  4. I フレームは、他のフレームを参照せずに生成されます。
  5. I フレームは、P フレームと B フレームの参照フレームです (その品質は、同じグループ内の後続のフレームの品質に直接影響します。
  6. I フレームは、フレーム グループ GOP のベース フレーム (最初のフレーム) であり、グループ内に I フレームは 1 つだけです。
  7. I フレームではモーション ベクトルを考慮する必要はありません。
  8. Iフレームが占めるデータの情報量は比較的大きい。

P フレームの特徴:

  1. P フレームは、I フレームの後に 1 ~ 2 フレーム分離されたコード化されたフレームです。
  2. P フレームは、動き補償の方法を使用して、前の I または P フレームと動きベクトル (予測誤差) との差を送信します。
  3. デコード時には、I フレームの予測値と予測誤差を合計して、完全な P フレーム画像を再構築する必要があります。
  4. P フレームは、前方予測フレーム間コーディングに属します。これは、それに最も近い前の I フレームまたは P フレームのみを参照します。
  5. P フレームは、その後ろの P フレームの参照フレームにすることも、その前後の B フレームの参照フレームにすることもできます。
  6. P フレームは参照フレームであるため、デコード エラーが拡散する可能性があります。
  7. 差動伝送のため、P フレームの圧縮率は比較的高くなります。

B フレームの特徴:

  1. B フレームは、前の I または P フレームと次の P フレームによって予測されます。
  2. B フレームは、前の I フレームまたは P フレームと次の P フレームの間の予測誤差と動きベクトルを送信します。
  3. B フレームは双方向予測符号化フレームです。
  4. B フレームは、C 参照フレーム間の動被写体の変化のみを反映するため、圧縮率が最も高く、予測はより正確です。B フレームの数を増やすと、ビデオ データの圧縮率を効果的に向上させることができます。リアルタイムのインタラクティブ環境、多すぎる Bフレームは前後のフレームに依存しすぎるため、遅延が発生します. 良好なネットワーク環境では、フレームは正常に送信されるため、問題はありません.しかし、ネットワークの状態が悪いと、B フレームが他のフレームを待つことになり、フレームが到着して遅延が発生します
  5. B フレームは参照フレームではなく、デコード エラーの拡散を引き起こしません。

注: I、B、および P フレームは、圧縮アルゴリズムのニーズに応じて人為的に定義され、すべて実際の物理フレームです。一般的に言えば、I フレームの圧縮率は 7 (JPG と同様)、P フレームは 20、B フレームは 50 に達することがあります。B フレームを使用すると多くのスペースを節約でき、節約されたスペースを使用してより多くの I フレームを保存できるため、同じビット レートでより良い画質を提供できることがわかります。

SPSとPPS

SPS は、シーケンス パラメーター セットとも呼ばれるシーケンス パラメーター セットです。コード化されたビデオ シーケンス (コード化されたビデオ シーケンス) のグローバル パラメータのセットは、SPS に格納されます。格納内容:フレーム数、参照フレーム数、復号画像サイズ、フレームフィールド符号化モード選択フラグなど いわゆるコード化されたビデオ シーケンスは、元のビデオ フレームのピクセル データのエンコードされた構造から構成されるシーケンスです。各フレームの符号化データが依存するパラメータは、画像パラメータ セットに格納されます。一般に、SPS および PPS の NAL ユニットは通常、コード ストリーム全体の先頭に配置されます。ただし、特殊なケースでは、これら 2 つの構造がコード ストリームの途中に現れることもあります。主な理由は次のとおりです。

  • デコーダーは、ストリームの途中でデコードを開始する必要があります。
  • エンコーダーは、エンコード プロセス中にコード ストリームのパラメーター (画像の解像度など) を変更します。

H.264 のもう 1 つの重要なパラメータ セットは、Picture Paramater Set (PPS) です。エントロピー符号化モード選択フラグ、スライスグループ数、初期量子化パラメータ、デブロッキングフィルタ係数調整フラグなど、画像に関するパラメータセットが格納されます。通常、PPS は SPS と同様であり、H.264 のベア コード ストリームの NAL ユニットに格納されますが、PPS NAL ユニットの nal_unit_type 値が 8 であることを除いて、カプセル化形式では、PPS は通常 SPS と一緒に格納されます。動画ファイルのヘッダーに。
フレームのグループの前に、SPS と PPS を最初に受信する必要があります。受信しないと、デコードできません。これら 2 つのデータ セットは I フレームに分割され、失われることはありません。

ビデオ伝送には、画面のぼやけとフリーズという 2 つの比較的一般的な現象があります。

  1. GOP パケット内の P フレームが失われると、デコード側で画像エラーが発生します。華平です。GOP フレームのグループのコヒーレント効果は、P フレームが失われるため、更新する必要がある部分がないため、正常に表示できません。そのため、にじむ現象があります。
  2. 画面がぼやける問題を解決するために、P フレームまたは I フレーム (その中のすべてのフレームを含む) を失った GOP を破棄し、次の I フレームまで画像を再度更新することができます。しかし、このフレームが失われるため、フリーズが発生します。

おすすめ

転載: blog.csdn.net/chanlp129/article/details/128475333