總體來看,通訊發(fā)展經(jīng)歷了幾個階段-消息(電報)-語音通話-視頻通話-AR/VR,當然聲音在其中是少不了的,即使在視頻和AR/VR階段,都需要有聲音的交流,總不能視頻上光白活沒聲音吧。本文就分享一下在實時通訊領(lǐng)域音頻編解碼的一些經(jīng)歷和經(jīng)驗。
音頻編解碼其實有很多種,在不同領(lǐng)域有不同的應用,要理解這個首先要從人說話和人耳朵聽到聲音的頻譜范圍說起,人說話的聲音頻譜能量范圍大部分分布在300~3400HZ,而人耳能聽到聲音的頻譜范圍一般為20~20000HZ,所以人耳是可以聽到除人說話外的自然界的很多其他聲音的,像樂器,自然界,尖鳴聲等等。當然每個人都會不太一樣,B站上有個可以測試自己聽覺范圍的,鏈接在下面,大家可以去試試(當然高頻的時候如何有任何不適,本人概不負責)。https://www.bilibili.com/video/BV1Xs411s7qo?from=search&seid=12278321081543626393
同時科學界奈奎斯特定理表明,通過2倍于最高頻率進行采樣的,就可以完整的還原模擬信號。了解了這兩個原理后,下面對音頻編解碼的應用就可以比較好的理解了。

先看一下音頻編碼和解碼的整體流程

人說話的聲音經(jīng)過數(shù)字采樣后,即為PCM原始采樣數(shù)據(jù),從圖中可以得知,不過什么編解碼類型,都是將PCM編碼壓縮方便傳輸,然后再解碼恢復成PCM的過程。
首先看在早期的固定電話時期,固話時期的編解碼主要有G.711a/u;G.729;G.722;G.723;G.726等等;這些編解碼基本都是使用8KHZ的采樣的,由于當時的通訊只是主要是人與人之間說話,8K采樣率足以覆蓋人說話聲音的最主要部分能量范圍了。最初的G.711a/u屬于無損編碼,但是由于要64Kbps的速率(但是ADSL電話線的速率也就是64K帶寬)。
不知道還有多少朋友知道ADSL上網(wǎng),最初就是用這64K的電話線傳輸,但是G.711把帶寬占光了,還怎么傳輸數(shù)據(jù)呢,因此后續(xù)逐漸被壓縮率更高但是效果也不遜色的G.729,G.726等編解碼取代使用。其中G.722屬于比較出名的一個系列,G.722.1是polycom研發(fā)的編解碼,而G.722.2就是AMR-WB+,下面提到的AMR-WB的超寬帶版本。

接下來到了移動通信(2G/3G)時代,由于通信的內(nèi)容仍然是人與人之前的說話,所以編解碼仍然是采用語音編解碼,移動側(cè)主要是使用的AMR(Adaptive
Multi Rate-Narrow Band Speech Codec),AMR-WB(分別是窄帶AMR和寬帶AMR)。窄帶AMR雖然仍然使用8K采樣,但是從其全稱可以看出,編解碼本身是多速率(8種速率模式),并且是可以切換的,這個特性的主要原因我認為是適應無線信道和傳輸通道的情況來自適應。舉個例子,可以想象一下,一個基站,如果有10部手機通話和100部通話,每部手機被分配的信道帶寬肯定是不一樣的,速率變換則可以根據(jù)信道情況進行靈活的速率切換,從而保障更多人的通話。

再往后就是Volte(4G),也就是大家當前在用的,采用了AMR-WB(Adaptive
Multi-RateWideband Speech Codec);此編解碼采用是16K采樣,比原來高了一倍;產(chǎn)生的效果就是時域上每秒多采樣8K個數(shù)據(jù),頻域上覆蓋的高頻范圍更廣,聲音細節(jié)更豐富。不過對于消費者體驗來說好像未得到大的提升。

但是到了4G時代,隨著帶寬越來越高,業(yè)務發(fā)展越來越豐富,為了提升語音清晰度和通話體驗,幾個大廠推出了EVS高清編解碼,并作為進入3GPP的唯一標準,EVS兼容了AMR-NB和AMR-WB,同時支持SWB(超寬帶)和FWB(全寬帶)采樣(最高到48KHZ),已經(jīng)覆蓋人耳聽到聲音的全部頻譜范圍了。大家手機上可以看到一個“HD”的標簽,這個其實就是E2了。隨著EVS的推出以及新業(yè)務的推廣(像最近的視頻彩鈴),大家應該可以感受到更豐富的聲音體驗了。

當然到了3G/4G時代,隨著互聯(lián)網(wǎng)的發(fā)展,基于互聯(lián)網(wǎng)的VOIP技術(shù)也蓬勃發(fā)展起來,但是基于互聯(lián)網(wǎng)的VOIP比運營商語音通話面臨著更加嚴峻的復雜網(wǎng)絡(luò)情況,畢竟不是專網(wǎng),因此面臨的延時帶寬問題更加嚴峻。VOIP的音頻編解碼也存在類似的發(fā)展階段,首先是語音編解碼,像iLBC和iSLK,這兩種編解碼都是GIPS公司開發(fā)的編解碼技術(shù),被Google收購后,兩種編解碼技術(shù)就用應用在WebRTC技術(shù)中并且開源了,ILBC編解碼的特點是減少每個音頻編碼幀之間的冗余性,每幀獨立可解,因此具備了很不錯的抗丟包特性。ISAK我了解的不多,除了繼承ILBC能力之外,好像是增加了帶寬預測功能。紅極一時的Skype使用的編解碼則是silk,silk編解碼對于語音有特別好的編碼效果,據(jù)說可以使得通話雙方聽起來像雙方在同一個房間里一樣(silk源碼原來在skype開發(fā)者網(wǎng)站開放的,不過網(wǎng)站現(xiàn)在無法訪問了,可以到github上找下聲網(wǎng)技術(shù)VP高大神共享上傳的源碼https://github.com/gaozehua/SILKCodec)
大名鼎鼎的WebRTC為了提升語音體驗,默認使用的編解碼就是Opus(silk編解碼和celt編解碼的組合);此編解碼器內(nèi)一個Music detector去判斷當前幀是語音還是音樂,語音選擇silk,音樂選擇celt(這款編解碼我確實不太熟悉,不過據(jù)說高頻領(lǐng)域比AAC弱一些);同時opus支持PLC(丟包補償),具備較好的網(wǎng)絡(luò)抗丟包特性。其實大家可以看到,WebRTC在google一直是走開源策略,如果不開源,google是不會使用的,像H.264因為不開源,google就另行開發(fā)了VP8,VP9,這個在后續(xù)的視頻編解碼里再探討。
其實音頻也不只在通訊領(lǐng)域使用,像AAC(Advanced AudioCoding(高級音頻編碼)),是一種由MPEG-4標準定義的有損音頻壓縮格式,由Fraunhofer發(fā)展,Dolby, Sony和AT&T是主要的貢獻者。在使用MP4作為各種內(nèi)容的容器格式的新多媒體MPEG-4標準中,它是MPEG Layer III / MP3的天然后繼者。AAC編解碼跟Mpeg4的視頻編解碼協(xié)議類似,也分為多Profile,LC-AAC(低復雜性)和HE-AAC(高效性),個人理解就是消耗CPU少和壓縮率更高。
當然說道RTC技術(shù),肯定要提到聲網(wǎng)Agora,Agora在19年RTC大會上也開源了自研的編解碼協(xié)議SOLO。SOLO應該是以Silk為基礎(chǔ),融合帶寬擴展(BWE)和多描述編碼(MDC)技術(shù),打造出的一款不穩(wěn)定網(wǎng)絡(luò)下抗包出眾的編解碼,至于具體實現(xiàn)我就要去GitHub上學習了。
最近驗證使用Agora的RTSA-Lite的SDK庫,按照API接口文件描述,支持這四種編解碼??梢钥闯銎溥x擇還是很有針對性的,opus可以無縫的和WebRTC對接;G722可以適應與移動端通訊;而兩個AAC系列可以利用在音樂音質(zhì)要求比較高的領(lǐng)域。(不知道為什么沒有SOLO?)

最后,隨著5G時代的到來,隨著內(nèi)容業(yè)務百花齊放,除了通話/音樂外,相信適用于新場景的音頻編解碼技術(shù)也會得到快速發(fā)展。像VR技術(shù),就需要3D沉浸式的音頻技術(shù),像大家都知道的杜比全景聲技術(shù),像object based
audio和ambisonics技術(shù);隨著網(wǎng)絡(luò)帶寬不再是問題,音頻編解碼應該不會再區(qū)分音頻和音頻了,融合是趨勢;所謂體驗無止境,從而音頻編解碼技術(shù)也無止境。
其實作為業(yè)務開發(fā)者,我覺得應該了解的是編解碼的特點,結(jié)合你所在領(lǐng)域的業(yè)務特點,以及業(yè)務所處網(wǎng)絡(luò),帶寬,丟包等等因素,已經(jīng)編解碼所在硬件的處理能力(內(nèi)存/CPU/協(xié)處理器),從而可以做出正確的選擇,初期我們是把這項技術(shù)應用在業(yè)務領(lǐng)域為客戶提供好的體驗(畢竟這個領(lǐng)域的大大神們研究了這么多久,我們沒必要從信號采樣再研究起);對于編解碼內(nèi)核的頻域轉(zhuǎn)換/濾波等原理性技術(shù)可以隨著業(yè)務的發(fā)展,當然結(jié)合自己的能力,再逐步加深學習。
本文為個人原創(chuàng),首發(fā)于聲網(wǎng)開發(fā)者社區(qū)https://rtcdeveloper.com/t/topic/20155