原理:
- 消除冗余信息,壓縮量最大,也叫有損壓縮
剔除人耳聽覺范圍外的音頻信號20Hz以下和20000Hz以上左驾;
去除被掩蔽的音頻信號,信號的遮蔽可以分為頻域遮蔽和時域遮蔽极谊;
頻域遮蔽效應(yīng)
屏蔽70分貝以下什荣,20HZ以下,20000HZ以上
屏蔽分貝小怀酷,頻率小的聲音
兩個頻率相近發(fā)出的聲音稻爬,去除低強(qiáng)度的,也就是分貝高的會蓋住分貝低的
- 時域遮蔽效應(yīng):
根根時間推移蜕依,相近頻率且同時出現(xiàn)的聲音桅锄,聲音強(qiáng)度高的遮蔽強(qiáng)度低的聲音,并且去除同一時間段前后雜音样眠,前遮蔽50毫秒友瘤,后遮蔽200毫秒,在這段時間內(nèi)的聲音檐束,強(qiáng)度越接近就越會被屏蔽辫秧。
- 去除冗余信息后,再進(jìn)行無損壓縮被丧;
- 無損壓縮就是壓縮后的數(shù)據(jù)能夠解壓縮進(jìn)行還原盟戏,有損則不能绪妹;
- 熵編碼中有
哈夫曼編碼:用一個很小的二進(jìn)制數(shù)代替一個長的字符串,頻率越高柿究,編碼越小邮旷,頻率越低,編碼越長
算術(shù)編碼:利用小數(shù)進(jìn)行編碼蝇摸,在香農(nóng)編碼的基礎(chǔ)改進(jìn)而來的
香農(nóng)編碼
音頻編碼過程
數(shù)據(jù)先同時通過 時域轉(zhuǎn)頻域變換器和心理學(xué)模型處理數(shù)據(jù)婶肩,前者將數(shù)據(jù)轉(zhuǎn)換成多種頻段的數(shù)據(jù),然后剔除不需要的頻段數(shù)據(jù)貌夕,后者會去除非人耳聽到的范圍聲音和一些復(fù)合聲音律歼,最后將兩者合并經(jīng)過量化編碼,無損編碼之類的啡专,形成比特流數(shù)據(jù)苗膝,在此之前還會有一些輔助數(shù)據(jù),此后數(shù)據(jù)就會變得非常兄簿伞辱揭;
常見的音頻編碼器
opus、aac病附、Ogg问窃、Speex、iLBC完沪、AMR域庇、G.711, 最常用的編碼器是opus aac。
opus常用于直播覆积,尤其是無延遲的直播听皿,webrtc默認(rèn)使用opus;
AAC是應(yīng)用最廣泛的編解碼;
Ogg收費宽档;
Speex支持回音消除尉姨;
G.711一般用于固定電話,聲音損耗嚴(yán)重吗冤,通話會失真又厉;
AAC比較適合有一定延遲的直播,AAC-LD屬于低延遲編碼器
- AAC編碼器:目前應(yīng)用最廣泛,如iOS椎瘟、安卓和其他嵌入式設(shè)備都包含了AAC硬件編解碼器覆致,主要學(xué)習(xí)這個編碼器;
用來取代mp3肺蔚,比mp3更高的壓縮比和保真性更強(qiáng)煌妈;
常用的規(guī)格有AAC LC、AAC HE V1 、AAC HE V2三種璧诵;
AAC HE V1 = AAC + SBR汰蜘;
AAV HE V2 = AAC + SBR + PS;
目前AAC HE V1 已經(jīng)被取代 V2 取代了腮猖;
V2的碼流跟V1的差別不是很大鉴扫,根據(jù)聲音的數(shù)據(jù)變化赞枕,如果兩個聲道的差別很大澈缺,碼流差別就會越小炕婶;
AAC 中header有兩種格式:
就相當(dāng)于在aac數(shù)據(jù)前面加了個Header姐赡,header里面就會包含aac數(shù)據(jù)的一些信息,方便進(jìn)行編解碼
- ADIF(Audio data interchange format): 特點是只能從頭開始解碼柠掂,可以確定的找到音頻數(shù)據(jù)的開始部分项滑,不能從音頻數(shù)據(jù)中間開始,這種格式常用于磁盤文件中涯贞;
- ADTS(Audio Data Transport Format):在每一幀的數(shù)據(jù)里面都會有一個同步字枪狂,也就是每幀都有一個header,所以他可以在任意的位置開始進(jìn)行解碼宋渔,就像流式數(shù)據(jù)州疾;
- ADTS結(jié)構(gòu): 由7-9個字節(jié)組成,通常情況下是7個字節(jié)皇拣,如果有CRC 就是9個字節(jié)严蓖,字節(jié)中的每一位都有獨特的含義;
1~12bit:全部是1也就是0xFFF氧急,表示是同步字颗胡;
13:編碼規(guī)范 0 = MPEG-4 1 = MPEG-2;
14~15:總是0吩坝;
16:是否有保護(hù) 1 代表 沒有 CRC 0 代表有CRC毒姨;
17~18:表示的是MPEG-4的音頻類型:AAC LC、 AAC HE V1 钉寝、AAC HE V2
19~22:表示的是采樣率
24~26:通道數(shù)
31~33:數(shù)據(jù)長度手素,也包括了header的長度
-
剩余的之后補(bǔ)上
image.png
其中每一十進(jìn)制數(shù)對應(yīng)的含義:
Audio Object Type: 在代碼中實際獲取類型的時候需要進(jìn)行+1,才是下面的類型
1 == AAC main
2 == AAC LC
5 == SBR == HE V1
29 == ps == HE V2
其中的采樣率是通過十進(jìn)制數(shù)表示的一個采樣率瘩蚪,有一個表泉懦,比如:0 == 96000Hz 1 == 88200HZ 等
通過網(wǎng)址 可以更詳細(xì)看到其中的含義