音視頻應用技術(即時通訊)

當我們使用像Skype、QQ這樣的工具和朋友流暢地進行語音視頻聊天時,我們可曾想過其背後有哪些強大的技術在支撐?網絡語音通話通常是雙向的,就模型層面來說,這個雙向是對稱的。爲了簡單起見,我們討論一個方向的通道就可以了。一方說話,另一方則聽到聲音。看似簡單而迅捷,但是其背後的流程卻是相當複雜的。    

語音採集

語音採集指的是從麥克風採集音頻數據,即聲音樣本轉換成數字信號。其涉及到幾個重要的參數:採樣頻率、採樣位數、聲道數。

簡單的來說:採樣頻率,就是在1秒內進行採集動作的次數;採樣位數,就是每次採集動作得到的數據長度。

而一個音頻幀的大小就等於:(採樣頻率×採樣位數×聲道數×時間)/8。     

通常一個採樣幀的時長爲10ms,即每10ms的數據構成一個音頻幀。假設:採樣率16k、採樣位數16bit、聲道數1,那麼一個10ms的音頻幀的大小爲:(16000*16*1*0.01)/8 = 320 字節。計算式中的0.01爲秒,即10ms。

 編碼

 

假設我們將採集到的音頻幀不經過編碼,而直接發送,那麼我們可以計算其所需要的帶寬要求,仍以上例:320*100 =32KBytes/s,如果換算爲bits/s,則爲256kb/s。這是個很大的帶寬佔用。而通過網絡流量監控工具,我們可以發現採用類似QQ等IM軟件進行語音通話時,流量爲3-5KB/s,這比原始流量小了一個數量級。而這主要得益於音頻編碼技術。

所以,在實際的語音通話應用中,編碼這個環節是不可缺少的。目前有很多常用的語音編碼技術,像G.729、iLBC、AAC、SPEEX等等。

 

網絡傳送

 

當一個音頻幀完成編碼後,即可通過網絡發送給通話的對方。對於語音對話這樣Realtime應用,低延遲和平穩是非常重要的,這就要求我們的網絡傳送非常順暢。

 

解碼

當對方接收到編碼幀後,會對其進行解碼,以恢復成爲可供聲卡直接播放的數據。    

 

語音播放

完成解碼後,即可將得到的音頻幀提交給聲卡進行播放。

 

如果僅僅依靠上述的技術就能實現一個效果良好的應用於廣域網上的語音對話系統,那就沒什麼太大的必要來撰寫此文了。正是有很多現實的因素爲上述的概念模型引入了衆多挑戰,使得網絡語音系統的實現不是那麼簡單,其涉及到很多專業技術。當然,這些挑戰大多已經有了成熟的解決方案。首先,我們要爲“效果良好”的語音對話系統下個定義,我覺得應該達到如下幾點:

(1)低延遲。只有低延遲,才能讓通話的雙方有很強的Realtime的感覺。當然,這個主要取決於網絡的速度和通話雙方的物理位置的距離,就單純軟件的角度,優化的可能性很小。

(2)背景噪音小。

(3)聲音流暢、沒有卡、停頓的感覺。

(4)沒有迴音。

 

下面我們就逐個說說實際網絡語音對話系統中額外用到的技術。

 

迴音消除 AEC

現在大家幾乎都已經都習慣了在語音聊天時,直接用PC或筆記本的聲音外放功能。殊不知,這個小小的習慣曾爲語音技術提出了多大的挑戰。當使用外放功能時,揚聲器播放的聲音會被麥克風再次採集,傳回給對方,這樣對方就聽到了自己的迴音。所以,實際應用中,迴音消除的功能是必需的。

在得到採集的音頻幀後,在編碼之前的這個間隙,是迴音消除模塊工作的時機。     

其原理簡單地來說就是,迴音消除模塊依據剛播放的音頻幀,在採集的音頻幀中做一些類似抵消的運算,從而將回聲從採集幀中清除掉。這個過程是相當複雜的,而且其還與你聊天時所處的房間的大小、以及你在房間中的位置有關,因爲這些信息決定了聲波反射的時長。 智能的迴音消除模塊,能動態調整內部參數,以最佳適應當前的環境。

 

噪聲抑制 DENOISE

 

噪聲抑制又稱爲降噪處理,是根據語音數據的特點,將屬於背景噪音的部分識別出來,並從音頻幀中過濾掉。有很多編碼器都內置了該功能。

 

抖動緩衝區 JitterBuffer

抖動緩衝區用於解決網絡抖動的問題。所謂網絡抖動,就是網絡延遲一會大一會小,在這種情況下,即使發送方是定時發送數據包的(比如每100ms發送一個包),而接收方的接收就無法同樣定時了,有時一個週期內一個包都接收不到,有時一個週期內接收到好幾個包。如此,導致接收方聽到的聲音就是一卡一卡的。

JitterBuffer工作於×××之後,語音播放之前的環節。即語音解碼完成後,將解碼幀放入JitterBuffer,聲卡的播放回調到來時,從JitterBuffer中取出最老的一幀進行播放。     

JitterBuffer的緩衝深度取決於網絡抖動的程度,網絡抖動越大,緩衝深度越大,播放音頻的延遲就越大。所以,JitterBuffer是利用了較高的延遲來換取聲音的流暢播放的,因爲相比聲音一卡一卡來說,稍大一點的延遲但更流暢的效果,其主觀體驗要更好。

當然,JitterBuffer的緩衝深度不是一直不變的,而是根據網絡抖動程度的變化而動態調整的。當網絡恢復到非常平穩通暢時,緩衝深度會非常小,這樣因爲JitterBuffer而增加的播放延遲就可以忽略不計了。

 

靜音檢測 VAD

 

在語音對話中,要是當一方沒有說話時,就不會產生流量就好了。靜音檢測就是用於這個目的的。靜音檢測通常也集成在編碼模塊中。靜音檢測算法結合前面的噪聲抑制算法,可以識別出當前是否有語音輸入,如果沒有語音輸入,就可以編碼輸出一個特殊的的編碼幀(比如長度爲0)。

特別是在多人視頻會議中,通常只有一個人在發言,這種情況下,利用靜音檢測技術而節省帶寬還是非常可觀的。

 

混音算法

 

在多人語音聊天時,我們需要同時播放來自於多個人的語音數據,而聲卡播放的緩衝區只有一個,所以,需要將多路語音混合成一路,這就是混音算法要做的事情。即使,你可以想辦法繞開混音而讓多路聲音同時播放,那麼對於迴音消除的目的而言,也必需混音成一路播放,否則,迴音消除最多就只能消除多路聲音中的某一路。

混音可以在客戶端進行,也可以在服務端進行(可節省下行的帶寬)。如果使用了P2P通道,那麼混音就只能在客戶端進行了。如果是在客戶端混音,通常,混音是播放之前的最後一個環節。

AnyChat是國內知名音視頻互動開發平臺,經過長達六年之久的廣泛應用和複雜化環境的檢測,AnyChat SDK系統在兼容性、安全性、穩定性、易用性方面具有較高的聲譽。

 產品跨平臺

 

AnyChat支持跨平臺的應用,服務器支持WindowsLinux、Unix等所有主流服務器操作系統,客戶端目前支持WindowsLinux(x86、ARM)以及Windows Mobile、AndroidiPhone平臺等,目前正在研發Win Phone7等平臺。AnyChat的跨平臺特性,爲客戶提供了廣闊的應用空間,如實現Windows桌面用戶的語音視頻交互的同時,還可以定製嵌入式硬件解決方案,實現嵌入式硬件與Windows桌面應用的互聯互通,在部隊遠程指揮、政府應急系統、數字化家庭、移動視頻監控、專家諮詢、在線客服、呼叫中心以及移動音視頻採集等領域有廣泛的應用空間。

視頻技術

 

 AnyChat採用國際領先的視頻編碼標準H.264(MPEG-4 part 10 AVC /H.264)編碼,H.264/AVC 在壓縮效率方面有着特殊的表現,一般情況下達到 MPEG-2 及 MPEG-4 簡化類壓縮效率的大約 2 倍。H.264具有許多與舊標準不同的新功能,它們一起實現了編碼效率的提高。特別是在幀內預測與編碼、幀間預測與編碼、可變矢量塊大小、四分之一像素運動估計、多參考幀預測、自適應環路去塊濾波器、整數變換、量化與變換系數掃描、熵編碼、加權預測等實現上都有其獨特的考慮。

採用先進去馬賽克技術,保障在視頻通訊過程中不出現花屏、馬賽克等現象。

 音頻技術

 

 AnyChat採用先進的AAC(Advanced Audio Coding)語音編碼體系,AAC是 MPEG1/2 Audio 的下一代有損音頻編碼, 並且是 MPEG-4 使用的音頻編碼,AAC採用了感知子帶技術(perceptual sub-band technology),與MP3等其它編碼器相比,AAC編碼器很大程度地改善了數據壓縮率和聲音品質。

 全面支持靜音檢測(VAD)、噪音抑制(NS)、自動增益(AGC)以及迴音消除(AEC)等音效處理,極大提高用戶體驗。

 P2P技術

 

 AnyChat針對可不經過服務器中轉的音視頻應用,採用了P2P通信技術,該技術的核心在於防火牆的穿越。使用P2P通信技術,可以大大的減輕系統服務器的負荷,併成幾何倍數的擴大系統的容量,且並不會因爲在線用戶數太多而導致服務器的網絡阻塞。

 支持UPNP協議,自動搜索網絡中的UPNP設備,主動打開端口映射,提高P2P通信效率。

 高性能網絡核心

 

 AnyChat服務器模塊採用完成端口實現高性能的系統架構,採用重疊I/O機制,通過線程池和緩衝池的管理,極高的優化了系統結構,提高了系統的性能。特別是在多CPU的服務器上,AnyChat服務器更能發揮服務器多處理器的優勢。

 AnyChat採用佰銳科技擁有自主知識產權的“MultiPath”P2P網絡路由算法,將服務器上的用戶組成一個P2P互通的網絡,流媒體數據在用戶之間傳遞,減少對服務器的網絡帶寬佔用,實現了一個高性能P2P網絡核心。

 傳統的P2P網絡應用(如P2P在線影院)所採用的算法需要長時間(如30秒,或更長)的緩衝,不適合即時通訊領域所要求的低延遲的目標,“MultiPath”P2P網絡路由算法便是針對即時通訊領域專門設計的P2P網絡算法,它保留了P2P網絡原有的網絡帶寬優勢,同時又極大的降低了中間的緩衝時間。 

 

開放的接口

 

AnyChat SDK分爲客戶端SDK和AnyChat Server SDK兩大部分,其中客戶端SDK用於實現語音、視頻的交互以及其它客戶端相關的功能,而服務器SDK主要實現業務層邏輯控制,以及與第三方平臺的互聯等。客戶端SDK和服務器SDK均支持C++、C#、VB.Net以及Delphi等開發語言。AnyChat SDK採用模塊化技術體系,良好的平臺兼容性與可擴展性,豐富的API函數,爲上層應用提供了開放的應用接口。

AnyChat內核開放CODEC接口,支持集成第三方的音視頻編、×××,可實現嵌入式終端設備上的硬件編解碼。

 http://anychat.storage.aliyun.com/AnyChatCoreSDK_Win32(MBCS)_V4.5.zip 

 對於本博有任何問題的朋友都可加QQ:992139738

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章