[音視頻開發(fā)] 音頻基礎(chǔ)知識(shí)

一. 直播客戶端音頻處理流程

首先采集音頻,采集到的音頻內(nèi)容過大,要經(jīng)過編碼壓縮才能傳輸。

二. 音頻數(shù)據(jù)流的采集

編碼流程:采集到的原始數(shù)據(jù)就是PCM,經(jīng)過編碼器編碼壓縮后成為aac/mp3格式的壓縮數(shù)據(jù),然后再套一層封裝形成mp4/flv格式的多媒體文件。

解碼流程:mp4/flv格式的多媒體文件經(jīng)過解封裝,得到aac/mp3格式的壓縮數(shù)據(jù),再經(jīng)過解碼器解碼,生成PCM數(shù)據(jù)。

可以看出編碼和解碼是完全相反的過程。

三. 聲音三要素

  1. 音調(diào):音頻的快慢。如男生音調(diào)小于女生,而女生小于兒童,音頻越快聲音越悅耳。
  2. 音量:震動(dòng)的幅度。
  3. 音色:諧波 不同的樂器有不同的諧波,對(duì)于樂器來說,鋼琴對(duì)于小提琴產(chǎn)生的聲音是不一樣的,但是他們的頻率是一樣的。


諧波就是和音,黃色綠色藍(lán)色三種正弦波通過協(xié)調(diào)合成了一個(gè)紫色的波形,其中綠色波是基頻波,合成的紫色波也是在它的頻率上微調(diào),而紫色中波形的小的震動(dòng)波形(如頂端)就是諧波,聲音好聽不好聽就是這些小的諧波導(dǎo)致的。

四. 模數(shù)轉(zhuǎn)換

我們自然界中的聲音是模擬信號(hào),需要將聲音的模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),如何進(jìn)行數(shù)字信號(hào)采樣,首先模擬信號(hào)如下:

對(duì)聲音進(jìn)行量化采樣,按照每0.25進(jìn)行采樣,當(dāng)然采樣越多聲音損失就越少:

經(jīng)過量化采樣后就變成了數(shù)字信息:


再將相應(yīng)的數(shù)據(jù)轉(zhuǎn)成二進(jìn)制,就可以在鏈路上傳播了。

五. 音頻原始數(shù)據(jù)

1. 音頻原始數(shù)據(jù)格式

常用的格式:

  • PCM:純的音頻數(shù)據(jù),沒有任何格式。
  • WAV:PCM數(shù)據(jù)上套上一個(gè)頭部,就成了WAV數(shù)據(jù),頭部存著PCM基本信息,所以它基本上存儲(chǔ)的是PCM數(shù)據(jù)。

2. 量化基本概念

  • 采樣大?。阂粋€(gè)采樣用多少bit存放。常用的是16bit
  • 采樣頻率:8k、16k。32k、44.1k、48k
  • 聲道數(shù): 單聲道、雙聲道、多聲道、三個(gè)聲道以上叫做立體聲。

一個(gè)PCM的音頻流的碼率=采樣率采樣大小聲道數(shù),比如:
采樣率為44.1khz,采樣大小為16bit,雙聲道的PCM編碼WAV文件,它的碼率為44.1khz162=1411.2kb/s 每秒1.4M的數(shù)據(jù)傳輸。這么大的碼流顯然無法在我們的網(wǎng)絡(luò)上傳輸,所以需要壓縮。

3. WAV Header

上面說了WAV格式是PCM上套了個(gè)頭部,頭部具體包括了采樣大小、采樣頻率,聲道數(shù)及其他信息。

六. 音頻編碼原理

1.音頻壓縮

音視頻壓縮技術(shù)是在保證信號(hào)在聽覺方面不產(chǎn)生失真的前提下,對(duì)音頻數(shù)據(jù)信號(hào)進(jìn)行盡可能大的壓縮,包括有損壓縮和無損壓縮。

  • 消除冗余信息,也是有損壓縮,冗余信號(hào)是指不能被人耳感知到的信號(hào),包含人耳聽覺范圍之外的音頻信號(hào)以及被掩蔽掉的音頻信號(hào)。信號(hào)的遮蔽可以分為頻域遮蔽和時(shí)域遮蔽。
頻域遮蔽效應(yīng)

聲強(qiáng)不高和人耳聽覺范圍之外的音頻信號(hào)都會(huì)被遮蔽掉,頻率相近的高聲強(qiáng)會(huì)遮蔽掉低聲強(qiáng)的聲音。

時(shí)域遮蔽效應(yīng)

隨著時(shí)間的推移,聲音之間會(huì)有遮蔽效應(yīng),越靠近某個(gè)時(shí)間段高聲強(qiáng)的聲音越容易被遮蔽,同時(shí)發(fā)出的聲音聲強(qiáng)低的被遮蔽。

  • 無損壓縮,無損編碼,通過優(yōu)化排列方式來達(dá)到壓縮目的。
熵編碼
  • 哈夫曼編碼
  • 算術(shù)編碼
  • 香農(nóng)編碼

2.音頻編碼過程

3.常用音頻編碼器

包括OPUS、AAC、Ogg、Speex、iLBC、AMR、G.711等,其中,AAC在直播系統(tǒng)中應(yīng)用比較廣泛;OPUS是較新的音編碼器,WebRTC默認(rèn)使用OPUS;固話一般用的G.711。
網(wǎng)上效果測(cè)評(píng):OPUS>AAC>Ogg。

AAC(Advanced Audio Coding)

相對(duì)于Mp3:

  • 壓縮率更高
  • 保真性較好,解壓還原度高。

它通過一些附加的編碼技術(shù)(比如PS、SBR等),衍生出了LC-AAC、HE-AAC(v1)、HE-AAC v2三種主要的編碼格式。

AAC格式

4.ffmpeg生成AAC文件

ffmpeg -i water.mp4 -vn -c:a libfdk_aac -ar 44100 -profile:a aac_he_v2 -b:a 48k -ac 2 out.aac

-b:a:音頻碼率

可能的報(bào)錯(cuò):

解決方案:

5.音頻重采樣

音頻重采樣就是將音頻三元組(采樣率、采樣大小、通道數(shù))的值轉(zhuǎn)成另一組值,如將44100/16/2轉(zhuǎn)成48000/16/2,

為什么要重采樣呢?
  • 從設(shè)備采集的音頻數(shù)據(jù)與編碼器要求的數(shù)據(jù)不一致
  • 揚(yáng)聲器要求的音頻數(shù)據(jù)與要播放的音頻數(shù)據(jù)不一致
  • 更方便運(yùn)算,如回音消除要求單聲道,因?yàn)閱温暤栏菀走M(jìn)行回音消除,所以需要重采樣變成單聲道。
重采樣的步驟
  • 創(chuàng)建重采樣上下文
  • 設(shè)置參數(shù)
  • 初始化重采樣
  • 進(jìn)行重采樣
重采樣的幾個(gè)重要的API
  • swr_alloc_set_opts:1. 創(chuàng)建重采樣上下文 2. 設(shè)置參數(shù)。
  • swr_init:初始化重采樣
  • swr_convert:對(duì)音頻幀轉(zhuǎn)換,重采樣。
  • swr_free:釋放上下文

6 .ffmpeg編碼過程

創(chuàng)建并打開編碼器
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容