AAC ADTS フォーマット分析
オーディオフォーマットは(Advanced Audio Coding)
ADTS
、AAC
オーディオのトランスポートストリームフォーマットで、同期ワードを持ったビットストリームであることが特徴で、
このストリームのどこからでもデコードを開始できます。
ADTS
ヘッダー情報は、任意のフレームのデコードをサポートするための鍵です。
`ADTS`的头信息都包含了每一帧的音频采样率、声道、帧长度等关键信息,从而让解码器能够解析读取。
上の図に示すように、ADTS
ヘッダー情報は 2 つの部分に分かれています。
adts_fixed_header()
;//固定ヘッダー情報adts_variable_header()
;//可変ヘッダー情報
固定ヘッダー情報の詳細 (部分) 分析:
- syncword、同期ヘッダーは常に ADTS フレームの開始を表す 0xFFF です。
- ID、MPEG 識別子、0 は MPEG-4 を識別し、1 は MPEG-2 を識別します。
- Layer、通常は '00';
- protection_absent、エラー コードをチェックするかどうかを示します。
- profile、使用する AAC のレベルを示します。
- sampling_frequency_index、使用されるサンプリング レートの添え字を示します。
- channel_configuration、チャネル数を示す
可変ヘッダー情報の詳細な (部分的な) 分析:
- aac_frame_length、ADTS フレームの長さ (ADTS ヘッダーと AAC 元のストリームを含む)、長さが 7 バイトか 9 バイトかを判断するエラー チェックがあるかどうか:
- adts_buffer_fullness、値は 0x7FF です。これは、可変コード レートのコード ストリームを意味します。
- number_of_raw_data_blocks_in_frameは、ADTS フレームに number_of_raw_data_blocks_in_frame + 1 AAC raw フレームがあることを示します。
MP3 フォーマット分析
MPEG Audio Layer 3
オーディオ圧縮パッケージ。ファイルは大まかに次の 3 つの部分に分けられます。
ID3V2
MP3
ファイルの先頭に位置し、作成者、作曲者、アルバムなどの情報が記録されます。拡張された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層に分かれておりVCL
、NAL
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)
。