參考維基百科、知乎問題等資料對AAC格式進行總結,沒有特別深入到細節,目的是讓大家對AAC有一個總體的認識。
1.AAC是什麼
高階音訊編碼(英語:Advanced Audio Coding,AAC),出現於1997年,基於MPEG-2的音訊編碼技術。由Fraunhofer IIS、杜比實驗室、AT&T、Sony、Nokia等公司共同開發。2000年,MPEG-4標準出現後,AAC重新整合了其特性,加入了SBR技術和PS技術,為了區別於傳統的MPEG-2 AAC又稱為MPEG-4 AAC。
2.AAC封裝格式
(參考鵬小鶘在問題AAC-LC 是什麼格式?和 AAC 有什麼區別?中的回答)
參考知乎的問題,AAC的音訊檔案格式常用的有以下兩種:
- ADIF Audio Data Interchange Format 音訊資料交換格式。這種格式的特徵是可以確定的找到這個音訊資料的開始,不需進行在音訊資料流中間開始的解碼,即它的解碼必須在明確定義的開始處進行。故這種格式常用在磁碟檔案中。
- ADTS Audio Data Transport Stream 音訊資料傳輸流。這種格式的特徵是它是一個有同步字的位元流,解碼可以在這個流中任何位置開始。 簡言之。ADIF只有一個檔案頭,ADTS每個包前面有一個檔案頭。
所以在直播等領域用的最多的還是ADTS。
ADTS的頭資訊分為兩部分,一個是固定頭資訊、緊接著是可變頭資訊。 固定頭資訊
可變頭資訊合起來
更直觀一點:
所以必須要了解ADTS封裝的格式,否則就不能自己講AAC打包到ADTS。
在FFmpeg的adtsenc.c 中定義了adts_write_frame_header方法,可以寫ADTS頭,大家可以參考。
2.1.部分引數介紹
序號5的profile是AOT - 1,AOT參考這裡
0: Null 1: AAC Main 2: AAC LC (Low Complexity) 3: AAC SSR (Scalable Sample Rate) 4: AAC LTP (Long Term Prediction) 5: SBR (Spectral Band Replication) 6: AAC Scalable 7: TwinVQ 8: CELP (Code Excited Linear Prediction) ....省略若干type
adts_buffer_fullness:0x7FF 說明是位元速率可變的碼流。
3.AAC規格
因為AAC是一個龐大家族,他們共分為9種規格,以適應不同場合的需要,也正是由於AAC的規格(Profile)繁多,導致普通電腦使用者感覺十分困擾: MPEG-2 AAC LC低複雜度規格(Low Complexity) MPEG-2 AAC Main主規格 MPEG-2 AAC SSR可變取樣率規格(Scaleable Sample Rate) MPEG-4 AAC LC低複雜度規格(Low Complexity),現在的手機比較常見的MP4檔案中的音訊部分就包括了該規格音訊檔案 MPEG-4 AAC Main主規格 MPEG-4 AAC SSR可變取樣率規格(Scaleable Sample Rate) MPEG-4 AAC LTP長時期預測規格(Long Term Predicition) MPEG-4 AAC LD低延遲規格(Low Delay) MPEG-4 AAC HE高效率規格(High Efficiency) 上述的規格中,主規格(Main)包含了除增益控制之外的全部功能,其音質最好,而低複雜度規格(LC)則是比較簡單,沒有了增益控制,但提高了編碼效率,至“SSR”對“LC”規格大體是相同,但是多了增益的控制功能,另外,MPEG-4 AAC/LTP/LD/HE,都是用在低位元率下編碼,特別是“HE”是有Nero AAC編碼器支援,是近來常用的一種編碼器,不過通常來說,Main規格和LC規格的音質相差不大,因此目前使用最多的AAC規格多數是“LC”規格,因為要考慮手機目前的記憶體能力未達合理水準。 MPEG-4 AAC LC(Low Complexity)是最常用的規格,我們叫“低複雜度規格”,我們簡稱“LC-AAC”,這種規格在中等位元速率的編碼效率以及音質方面,都能找到平衡點。所謂中等位元速率,就是指:96kbps-192kbps之間的位元速率。因此,如果要使用LC-AAC規格,請儘可能把位元速率控制在之前說的那個區間內。 附加一篇參考文章:AAC規格(LC,HE,HEv2)及效能對比
參考
ADTS: