1. 程式人生 > >開發一個實時音視訊通訊系統,你需要什麼技術儲備?

開發一個實時音視訊通訊系統,你需要什麼技術儲備?

RTC(real time communication)實時通訊系統是最近網際網路應用的一個新領域。RTC系統的應用極其廣泛,我們常見的視訊電話,會議系統,遠端桌面與控制都是RTC系統的一個應用。在移動網際網路飛速發展的今天,各種應用都渴望加入RTC的功能,實現使用者與企業,使用者與使用者之間的音視訊交流。於是問題出現了,開發一個RTC系統需要什麼技術儲備?

有人說只需要懂javascript就可以了。WebRTC的出現極大的降低了RTC的開發門檻。只需要編寫javascript程式碼就可以實現瀏覽器之間的音視訊通話。且不論通話質量,瀏覽器的相容性,網路穿透能力,那些不使用HTML的原生APP怎麼辦?

又有人提出WebRTC也支援Native開發,只要有懂C++和相關應用平臺(Android,iOS,Windows,Mac)開發的軟體工程師就可以了。WebRTC確實可以在這些平臺上開發原生的應用。將WebRTC編譯打包後嵌入APP可以實現RTC的功能,就是說能通了。但一個合格的RTC系統僅僅是能通就可以了嗎?

以音視訊通話為例,使用者期望的RTC應用應該是:通話不卡不掉低延時,聲音清晰真實無回聲,畫面流暢清晰無卡頓。如果直接採用上面WebRTC整合,我們很容易發現,在大多數情況下,通話並不像原來想象的那樣完美。由於網路的原因,通話斷斷續續,延時很大。由於終端的適配不好,語音通話回聲嚴重,噪聲嚴重影響體驗。視訊不清楚,不流暢。

RTC系統的每一個部分都需要優化,需要打磨,才能打造出完美的使用者體驗。現在的問題是,開發一個優秀的RTC系統需要具備哪些技術儲備呢?

先看終端方面。解決語音通話的問題,首先需要有合適的語音編解碼器,然後需要調整音訊處理模組的演算法。這裡面內容比較廣,有噪聲消除,回聲抑制,自動增益。比較前沿的還有多麥克風降噪,盲擴增強等等。總之這些都需要演算法的儲備,涉及語音訊號處理、統計訊號處理等方面的內容。有了演算法還不夠,還需要有好的實現。各個平臺(Android,iOS,Windows,Mac)底層音訊系統也需要深入瞭解。有時候演算法挺好的,但有些機器先天不足,比較特別,需要特殊處理。這需要投入許多人力物力對各種型號的硬體做適配。優秀的系統可能需要適配幾百上千個不同的裝置。

同樣的,對於視訊,我們需要對視訊編解碼器有深入的瞭解。這樣才能用最低的位元速率展示清晰的視訊畫面。視訊的前後處理,比如降噪,增強(包括流行的美顏)也少不了。這就需要影象與視訊訊號處理。視訊資料量比較大,對底層視訊裝置也需要深入研究。適配也少不了。

說完了終端,再說說網路。網路抗丟包是必備選項。網際網路不是一個可靠的實時音視訊傳輸網路。在不可靠的網路中實現可靠的音視訊傳輸考驗系統設計的能力。這裡既有通道編碼的理論也有網路對抗的實際經驗。

如果要實現可靠的雲服務,遍佈全球的伺服器網路也必不可少。高可用性,負載均衡等等。。。

現在我們知道開發一個RTC系統需要什麼技術了。這個系統涉及到幾乎所有的網路與音視訊處理的理論與實踐。

作者簡介:

鄭仲侯 聲網Agora.io音視訊構架師

碩士畢業於上海交通大學電子工程系,訊號處理專業。先後在National InstrumentsSRSDTS工作十餘年。專注訊號處理演算法與實踐,加入Agora後從事音視訊引擎的開發,持有雙麥降噪專利。