一般的なオーディオおよびビデオ形式の簡単な分析

AAC ADTS フォーマット分析

オーディオフォーマットは(Advanced Audio Coding)
ADTSAACオーディオのトランスポートストリームフォーマットで、同期ワードを持ったビットストリームであることが特徴で、
このストリームのどこからでもデコードを開始できます。
ADTSヘッダー情報は、任意のフレームのデコードをサポートするための鍵です。
写真の説明を追加してください

`ADTS`的头信息都包含了每一帧的音频采样率、声道、帧长度等关键信息,从而让解码器能够解析读取。

上の図に示すように、ADTSヘッダー情報は 2 つの部分に分かれています。

  • adts_fixed_header();//固定ヘッダー情報
  • adts_variable_header();//可変ヘッダー情報
    ここに画像の説明を挿入

固定ヘッダー情報の詳細 (部分) 分析:

  1. syncword、同期ヘッダーは常に ADTS フレームの開始を表す 0xFFF です。
  2. ID、MPEG 識別子、0 は MPEG-4 を識別し、1 は MPEG-2 を識別します。
  3. Layer、通常は '00';
  4. protection_absent、エラー コードをチェックするかどうかを示します。
  5. profile、使用する AAC のレベルを示します。
  6. sampling_frequency_index、使用されるサンプリング レートの添え字を示します。
  7. channel_configuration、チャネル数を示す

ここに画像の説明を挿入

可変ヘッダー情報の詳細な (部分的な) 分析:

  1. aac_frame_length、ADTS フレームの長さ (ADTS ヘッダーと AAC 元のストリームを含む)、長さが 7 バイトか 9 バイトかを判断するエラー チェックがあるかどうか:
  2. adts_buffer_fullness、値は 0x7FF です。これは、可変コード レートのコード ストリームを意味します。
  3. number_of_raw_data_blocks_in_frameは、ADTS フレームに number_of_raw_data_blocks_in_frame + 1 AAC raw フレームがあることを示します。

MP3 フォーマット分析

MPEG Audio Layer 3オーディオ圧縮パッケージ。ファイルは大まかに次の 3 つの部分に分けられます。

  • ID3V2MP3ファイルの先頭に位置し、作成者、作曲者、アルバムなどの情報が記録されます。拡張されたID3V1情報量は長さが可変で、以下で構成されます。
    • タグ ヘッダー (1 つ): 長さは10バイトです。
    • ラベル フレーム (いくつか): すべて、10バイトのフレーム ヘッダーと1少なくともバイトのコンテンツがあります。
  • オーディオ データ、特定の詳細は次のように配布されます。
    • フレーム ヘッダー:4バイトを占有し、同期情報、バージョン、レイヤー、CRCチェックサムなどの情報を記録します。
    • CRC: 通常は2バイト
    • チャンネル情報(Side info):
  • ID3V1通常、128ファイルの最後の最後のバイトは、ID3情報を格納するために使用されます。

以下は<天地の孤独な影、行かせてくれ.mp3>の例です。
ここに画像の説明を挿入
ここに画像の説明を挿入

拡張学習:
Mp3 ファイル構造の完全な分析 (1)このリンクには複数の拡張リンクがあります.
Mp3 ファイル構造の完全な分析 (2)を参照してください


H264 NALU分析

ここに画像の説明を挿入

NALU構成構造:

  • SPS、シーケンス パラメータ セット。
  • PPS、画像パラメータ セット。
  • I Frameイントラコード化されたフレーム;
  • P Frame前方予測符号化フレーム。
  • B Frame双方向予測符号化フレーム

NALU機能は2層に分かれておりVCLNAL

  • VCLコア圧縮エンジンとブロック、マクロブロック、およびスライスの構文レベル定義を含むビデオ コーディング レイヤー。
  • NALネットワーク抽象化レイヤーは、ビデオ コーディング レイヤーによって生成されたビット文字列をさまざまなネットワークおよび複数の環境に適応させ、スライス レベルより上のすべての構文レベルをカバーします。

1 NALU= ビデオ エンコーディングに対応するヘッダー情報のセットNALU+ 1RBSP(Raw Byte Sequence Payload)
ここに画像の説明を挿入

NALUヘッダー情報を細分化します。
ここに画像の説明を挿入

  • T : 図に示すように、ロード データ型を示します。5 bit
  • R : 重要度インジケータ ビット、説明2 bit
  • F : 禁制ビット、占有1 bit

AVBitStreamFilter

typedef struct AVBitStreamFilter {
    const char *name;

    /**
     * A list of codec ids supported by the filter, terminated by
     * AV_CODEC_ID_NONE.
     * May be NULL, in that case the bitstream filter works with any codec id.
     */
    const enum AVCodecID *codec_ids;

    /**
     * A class for the private data, used to declare bitstream filter private
     * AVOptions. This field is NULL for bitstream filters that do not declare
     * any options.
     *
     * If this field is non-NULL, the first member of the filter private data
     * must be a pointer to AVClass, which will be set by libavcodec generic
     * code to this class.
     */
    const AVClass *priv_class;

    /*****************************************************************
     * No fields below this line are part of the public API. They
     * may not be used outside of libavcodec and can be changed and
     * removed at will.
     * New public fields should be added right above.
     *****************************************************************
     */

    int priv_data_size;
    int (*init)(AVBSFContext *ctx);
    int (*filter)(AVBSFContext *ctx, AVPacket *pkt);
    void (*close)(AVBSFContext *ctx);
    void (*flush)(AVBSFContext *ctx);
}

拡張学習:
H264 コーデックのブロック図


FLV 形式

これは、ファイル ヘッダーファイル ボディで構成される形式です

  • ファイル本体 ( file Body)は、前のタグ サイズ フィールド + タグのペアで構成されます
  • ファイル ヘッダーの後の最初の以前のタグ サイズ フィールドの値 ( file Header)は 0 です。
  • Previous Tag Sizeフィールドは、前の 4 バイトを占有し、前のタグのサイズtagを記録し、逆読み処理に使用されます。tag
  • タグは大きく、スクリプト(フレーム)データ型、オーディオデータ型、ビデオデータ型の3種類に分けられます。
    ここに画像の説明を挿入

tagそれらのヘッダーtag Header構造は同じですが (上の図を参照)、タイプが異なり、自然データ領域が異なります。

  • MateData Tagデータ領域構造は主に、サンプリング、チャネル、周波数、その他の情報などのビデオまたはオーディオ情報のデータを記述するために使用されます。
    • 最初のAMFパケット、通常は 3 バイト:
      • 最初のバイトは常に で0x22、文字列を示します。
      • 2 ~ 3 バイトは、通常、文字列の長さを識別するために使用されます0x000A
      • 最後は文字列の内容で、通常は常にonMetaData(6F,6E,4D,65,74,61,44,61,74,61).
    • セカンドAMFパッケージ
      • 最初のバイトはAMFパッケージのタイプを示し、通常は常に0x08配列を示します。
      • 2 ~ 5 バイト目は配列要素の数を表します。
      • 最後に、要素名と値のペアである配列要素のカプセル化です (録画時間、ビデオの幅、高さ、およびその他の情報)。
  • Video Tag Data
    • (4 bit)最初のバイトには、フレーム タイプとエンコード IDを識別するビデオ データのパラメータ情報が含まれます(4 bit)
    • 2 番目のバイトは、ビデオ ストリーム データとして始まります(8*n bit)
  • Audio Tag Data
    • 最初のバイトには、オーディオ形式(4 bit)、サンプリング レート(2 bit)、サンプリング精度(1 bit)、およびオーディオ チャネルを識別するオーディオ データのパラメータ情報が含まれます(1 bit)
    • 2 番目のバイトは、オーディオ ストリーム データとして始まります(8*n bit)

おすすめ

転載: blog.csdn.net/Stephen8848/article/details/125232659