(オーディオとビデオの学習ノート):H264の基本概念

H264基本概念研究ノート

  • NALU(ネットワーク抽象化レイヤーユニット)
  • GOP(Group of Pictures)は、主に1つのIDRフレームと次のIDRフレームの間のフレーム数を表すために使用されます。
  • H264は、シーケンス(GOP)、画像(pictrue)スライス(Slice)、マクロブロックMacroblock 、およびサブブロック(subblock)の5つのレベルに編成します。
  • H264は、ビデオを連続するフレームに分割して送信し、連続するフレーム間でI P、およびBフレームを使用します。同時に、フレーム内コンテンツの場合、画像は送信用にブロック、マクロブロック、ワードブロックに分割されます。このプロセスにより、ビデオファイルの圧縮とパッケージ化が実現されます。
  • IDR瞬時デコードリフレッシュ、瞬時デコードリフレッシュ
    • シーケンスの最初の画像は、IDR画像と呼ばれている(すなわち、リフレッシュ画像)、およびIDRの画像が全てであるI-フレーム画像
  • そのコア機能は、デコードを再同期することです。デコーダーがIDRイメージをデコードすると、参照フレームキューがすぐクリアされ、デコードされたすべてのデータが出力または破棄され、パラメーターセットが再度検索され、新しいパラメーターセットが開始されます。
  • Bフレームは参照フレームとして使用できません。

NALU

  • SPSシーケンスパラメータセット。コード化されたビデオシーケンス(コード化されたビデオシーケンス)のグローバルパラメータのセットSPSに保存されます。
  • PPS画像パラメータセット。シーケンス内の特定の画像または特定の画像のパラメータに対応します。
  • Iフレームフレーム内でコード化されたフレーム。個別にデコードして完全な画像を生成できます。
  • Pフレーム前方予測コーディングフレーム。完全な画像を作成するには、前のIまたはB参照する必要があります
  • Bフレーム:双方向予測補間コーディングフレーム。完全な画像を作成するには、前のIまたはPフレームと次のPフレームを参照する必要があります。
  • Iフレームを送信する前に、SPSとPPSを少なくとも1回送信する必要があります

NALU構造

  • 元のH.264ストリーム(ベアストリーム)は1つのNALUで構成され、その機能は2つのレイヤーに分割されています
    • VCL(Video Coding Layer):コア圧縮エンジンとブロック、マクロブロックと構文レベルの定義を含み、設計目標は、効率的なコーディングのためにネットワークにできるだけ固有にすることです。
    • NAL(オープンネットワーク抽出レイヤー)VCLは、結果の文字列を関連付けます⽐さまざまな環境やポリオールに適合したレイドオープンネットワークで、文法レベルより上のすべての静止画レベルをカバーします
  • VCLでのデータ送信または保存の前に、これらのエンコードされたVCLデータはNALユニットにマッピングまたはカプセル化されます。
  • 1 NALU =ビデオエンコーディングに対応する1セットのNALUヘッダー情報+1つのrawバイトシーケンスペイロード(RBSP、Rawバイトシーケンスペイロード)
  • NALU構造ユニットの主な構造は次のとおりです。

  • オリジナルのH.264NALUユニットは通常、次の3つの部分で構成されています。[StartCode] [NALU Header] [NALU Payload]
    • スタートコードは、これはNALU単位の始まりであり、それは「00 00 00 01」または「00 00 01」でなければならないことを示すために使用されます
    • さらに、基本的にNALヘッダー+ RBSPと同等です。
  • FFmpegが逆多重化された後、MP4ファイルから読み取られたパケットにはスタートコードが含まれていませんが、TSファイルから読み取られたパケットにはスタートコードが含まれています。

NALUを分析する

  • NALユニットは、特定の構文要素の可変バイト文字列であり、1バイトのヘッダー情報(データ型を示すために使用)と数バイトのペイロードデータが含まれます
  • NALUヘッダー情報(1バイト):

(注:画像参照:https//www.jianshu.com/p/31ed32fd7b6b

  • Tは負荷データ型で、5ビットを占有します
    • nal_unit_typeはの種類このNALUのユニット112が使用されていることにより、H.264 、および2431を使用しているアプリケーションによって以外H.264
  • Rは重要度インジケータであり、2ビットを占めます
    • nal_ref_idc。:00〜11を取ります。これこのNALUの重要性を示しいるようです。
    • 例えばNALU用のデコーダ00は、映像の再生、0影響を与えることなく、それを破棄することができるまで3を、大きな値、より重要な現在のNALが、それが最初に保護する必要があります。
    • 現在のNALが参照フレーム、シーケンスパラメータセット、または画像パラメータセットの重要な単位である場合、この構文要素は0より大きくなければなりません
  • Fは禁止位置で、1ビットを占有します
    • forbidden_​​zero_bit このビットは0でなければならないことがH.264仕様で指定されています
  • H.264こと標準状態データストリームが媒体上に記憶されている場合:開始コード0x000001のまたは0x00000001のがされる前に、追加NALUを示すための開始および終了位置NALUを
    • このメカニズムでは、開始コードはNALUの開始識別子としてコードストリームで検出されます次の開始コードが検出されると、現在のNALUは終了します。
    • 3バイトの0x000001のが唯一である時に使用される場合、完全なフレームを複数のスライス(スライス)にコンパイルされNALUこれらのスライスを含むが使用3-バイトのスタートコード。
    • それ以外の場合は、4バイト0x00000001です。

H264annexbモード

  • H264には2つのパッケージがあります。
    • Annexbモード、従来のモード、スタートコード、SPS、PPSはESにあります(「 H264ES PS TSストリームの違い」 https://blog.csdn.net/coloriy/article/details/80623192を参照)。
    • mp4モード、通常どおりに撮影mp4 MKVmp4モードで、スタートコード、SPS、PPSはなく、その他の情報はコンテナパッケージ化されます。各⼀⾯フレームは⻓のフレームの4バイトです
  • 多くのデコーダは唯一annexbモードをサポートしていますが、変換する必要があるので、MP4 使用h264_mp4toannexb_filteの変換を行うにRffmpegのを
const AVBitStreamFilter *bsfilter = av_bsf_get_by_name("h264_mp4toannexb"); 
AVBSFContext *bsf_ctx = NULL; 
// 2 初始化过滤器上下⽂ 
av_bsf_alloc(bsfilter, &bsf_ctx); //AVBSFContext; 
// 3 添加解码器属性 
6avcodec_parameters_copy(bsf_ctx->par_in, ifmt_ctx->streams[videoindex]->cod ecpar); 
av_bsf_init(bsf_ctx);

GOP Group of Pictures

  • ビデオコーディングシーケンスでは、GOPはGroup of picturesの略で、2つのIフレーム間の距離を指します。
  • 参照(参照期間)とは、2つのPフレーム間の距離を指します。
  • 1つのIフレームは1つのPフレームよりも多くのバイトを占有し、1つのPフレームは1つのBフレームよりも多くのバイトを占有します
  • したがって、同じビットレートを前提として、GOP値が大きいほどPフレームBフレームの数が多くなり、各I P 、およびBフレームが占める平均バイト数が多くなります。より良い画質を得る;リファレンスが大きいほどBフレームの数が多くなり、同様に、より良い画質を得るのが簡単になります。
  • GOP値を大きくして画質を向上させるには限界があります。シーン切り替えの場合、H.264エンコーダーは自動的かつ強制的にIフレームを挿入します。このとき、実際のGOP値は短くなります。
  • GOP、P及びBフレームは、Iフレームにより予測される。Iフレームの画質が低い場合、それは次のGOPまでGOP内の後続のP及びBフレームの画質に影響を与える。それはあります最初から回復できるので、GOP値を大きく設定しすぎないでください。
  • 以来の複雑PBのフレームのものよりも大きいIフレーム、あまりにも多くのP及びBフレームは、符号化効率に影響を与え、符号化効率が低下します。
  • さらに、過剰なGOPシーク操作の応答速度にも影響します。PフレームBフレームは、前のIまたはPフレームから予測されるため、シーク操作を直接配置する必要があります。特定のPまたはBフレームをデコードする場合、復号された提示する必要GOPののI -フレームと前N-番目のフレームの予測缶、GOPは、⻓より、複数の予測フレームを復号する値シークより⻓時間応答。
  • 拡張:https //www.jianshu.com/p/31ed32fd7b6bを参照して ください

おすすめ

転載: blog.csdn.net/baidu_41388533/article/details/114756342