音視頻數據處理(三)-AAC音頻碼流分析

一、AAC概述

AAC(Advanced Audio Coding),高級音頻編碼,是基于MPEG-2的音頻編碼技術,于1997年推出,主要用于取代MP3格式。2000年,隨著MPEG-4標準的推出,AAC重新集成了新的技術(如SBR、PS等)特性,稱之為MEPG-4 AAC。AAC共有9種規(guī)格,具體如下所示:

編號 規(guī)格 說明
1 MPEG-2 AAC LC 低復雜度規(guī)格
2 MPEG-2 AAC Main 主規(guī)格
3 MPEG-2 AAC SSR 可變采樣率規(guī)格
4 MPEG-4 AAC LC 低復雜度規(guī)格
5 MPEG-4 AAC Main 主規(guī)格
6 MPEG-4 AAC SSR 可變采樣率規(guī)格
7 MPEG-4 AAC LTP 長期預測規(guī)格
8 MPEG-4 AAC LD 低延遲規(guī)格
9 MPEG-4 AAC HE 高效率規(guī)格

AAC是一種高壓縮比的音頻壓縮算法,本文主要從數據處理的角度對AAC音頻碼流進行分析。

二、AAC碼流結構

AAC音頻格式有兩種:具體如下:

ADIF(Audio Data Interchange Format),音頻數據交換格式:只有一個統(tǒng)一的頭,必須得到所有數據后解碼,適用于本地文件。

ADTS(Audio Data Transport Stream),音視數據傳輸流:每一幀都有頭信息,可在任意幀解碼,適用于傳輸流。

ADIF格式如下所示:

ADIF Header raw_data_stream

ADIF Header格式定義如下所示:

ADIF Header.png

ADTS碼流是由連續(xù)的多個ADTS Frame組成的,ADTS Frame是由ADTS Header和AAC ES組成的,具體如下所示:

...... ADTS Header AAC ES ADTS Header AAC ES ......

ADTS Header,一般為7字節(jié)或9字節(jié)(有CRC校驗),包含采樣率、聲道數、幀長度等信息,主要由adts_fixed_header、adts_variable_header、crc三部分組成。

adts_fixed_header:固定頭,內容是不變的,每一幀的內容都相同,具體格式如下所示:

adts_fixed_header.png

syncword(12bit):同步字值為0xFFF,所有位為1。

ID(1bit):0表示MPEG-4,1表示MPEG-2。

layer(2bit):所有位值為0。

protection_absent(1bit):0表示有CRC,1表示沒有CRC。

profile(2bit):配置級別,MPEG-2中定義profile取值如下圖所示:

profile.png

sampling_frequency_index(4bit):采樣頻率,具體取值如下圖所示:

sampling_frequency_index.png

private_bit(1bit):see ISO/IEC 11172-3, subclause 2.4.2.3 (Table 8)。

channel_configuration(3bit):表示聲道數。

original/copy(1bit):編碼默認值為0,解碼忽略此值。

home(1bit):編碼默認值為0,解碼忽略此值。

adts_variable_header:可變頭,內容是變化的,每一幀的內容存在變化,具體格式如下所示:

adts_variable_header.png

copyright_identification_bit(1bit):編碼默認值為0,解碼忽略此值。

copyright_identification_start(1bit):編碼默認值為0,解碼忽略此值。

frame_length(13bit):幀長度,即整個ADTS Frame的長度。

adts_buffer_fullness(11bit):默認值為0x7FF,表示可變碼流。

number_of_raw_data_blocks_in_frame(2bit):其值加1表示ADTS Frame中原始數據塊的個數。

三、AAC數據示例

利用UItraEdit工具打開一個AAC文件進行數據分析,如下圖所示:

AAC.png

紅色標注部分為ADTS Header,根據前文所述,第一個Header詳細數據分析如下:

syncword(12bit):值為0xFFF。

ID(1bit):值為1,表示MPEG-2。

layer(2bit):值為0。

protection_absent(1bit):值為1,表示沒有CRC。

profile(2bit):值為1,表示LC。

sampling_frequency_index(4bit):值為4,表示44100Hz。

private_bit(1bit):值為0。

channel_configuration(3bit):值為2,表示雙通道。

original/copy(1bit):值為0。

home(1bit):值為0。

copyright_identification_bit(1bit):值為0。

copyright_identification_start(1bit):值為0。

frame_length(13bit):值為106,表示整個ADTS Frame的長度。

adts_buffer_fullness(11bit):值為0x7FF,表示可變碼流。

number_of_raw_data_blocks_in_frame(2bit):值為0,表示ADTS Frame中原始數據塊的個數為1。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容