從語音通話和視頻通話兩個方面搭建專屬於自己的私有化部署的視頻會議通話系統

召開遠程視頻會議,可大大提高工作效率,節省與會人員的工作時間和會議費用。視頻會議通話系統應用在政府、軍隊、教育、金融、交通、能源、醫療等行業及跨國、跨地區的企業中逐步普及。

 

EasyRTC視頻通話系統

EasyRTC視頻通話系統(以下簡稱EasyRTC)是一款覆蓋全球的實時音視頻通話與會議軟件,結合了智能視頻、智能語音、窄帶傳輸、通道加密、數據加密等技術,可通過微信小程序、H5頁面、APP、PC客戶端等接入方式之間互通,快速從零開始搭建實時音視頻通信,支持一對一、一對多等視頻通話,滿足語音視頻社交、在線教育和培訓、視頻會議和遠程醫療等場景;支持多終端接入方式之間互通,快速從零開始搭建實時音視頻通信平臺。

EasyRTC視頻通話系統具有實時音視頻通話,支持視頻會議(單路、多路)會議錄像會議回放旁路直播等技術特點。(演示地址:https://demo.easyrtc.cn)

 

今天通過從語音通話和視頻通話兩個方面全面解讀視頻會議系統的功能架構。

一、語音通話

1、基礎模型

在視頻會議中,網絡語音通話通常多對多的的,但就模型層面來說,我們討論一個方向的通道就可以了。一方說話,另一方則聽到聲音。看似簡單而迅捷,但是其背後的流程卻是相當複雜的。我們將其經過的各個主要環節簡化成下圖所示的概念模型:

 

這是一個最基礎的模型,由五個重要的環節構成:採集、編碼、傳送、解碼、播放。

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

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

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

當對方接收到編碼幀後,會對其進行解碼,以恢復成爲可供聲卡直接播放的數據。   完成解碼後,即可將得到的音頻幀提交給聲卡進行播放。

2、高級功能

如果僅僅依靠上述的技術就能實現一個效果良好的應用於廣域網上的語音對話系統,那就太easy了。正是由於很多現實的因素爲上述的概念模型引入了衆多挑戰,使得網絡語音系統的實現不是那麼簡單,其涉及到很多專業技術。一個“效果良好”的語音對話系統應該達到如下幾點:低延遲,背景噪音小,聲音流暢、沒有卡、停頓的感覺,沒有迴音。

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

(1)迴音消除

現在大家幾乎都已經都習慣了在語音聊天時,直接用PC、手機的聲音外放功能。當使用外放功能時,揚聲器播放的聲音會被麥克風再次採集,傳回給對方,這樣對方就聽到了自己的迴音。

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

(2)噪聲抑制
噪聲抑制又稱爲降噪處理,是根據語音數據的特點,將屬於背景噪音的部分識別出來,並從音頻幀中過濾掉。

(3)抖動緩衝區

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

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

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

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

(4)混音

在視頻會議中,多人同時發言時,我們需要同時播放來自於多個人的語音數據,而聲卡播放的緩衝區只有一個,所以,需要將多路語音混合成一路,這就是混音算法要做的事情。

二、視頻通話

1、基礎模型

視頻通話的概念模型與語音完全一致:

 

攝像頭採集指的是從捕捉攝像頭採集到的每一幀視頻圖像。

一般而言,一個攝像頭可以支持多種不同的採集分辨率和採集幀頻,而不同的攝像頭支持的分辨率的集合不一樣。比如現在有很多高清攝像頭可以支持30fps的1920*1080的圖像採集。

編碼用於壓縮視頻圖像,同時也決定了圖像的清晰度。視頻編碼常用的技術是H.264、H.265、MPEG-4、XVID等。
     
當對方接收到編碼的視頻幀後,會對其進行解碼,以恢復成一幀圖像,然後在UI的界面上繪製出來。

2、高級功能

相比於語音,視頻的相關處理要簡單一些。

(1)動態調整視頻的清晰度

在Internet上,網絡速度是實時動態變化的,所以,在視頻會議中,爲了優先保證語音的通話質量,需要實時調整視頻的相關參數,其最主要的就是調整編碼的清晰度,因爲清晰度越高,對帶寬要求越高,反之亦然。

比如,當檢測網絡繁忙時,就自動降低編碼的清晰度,以降低對帶寬的佔用。

(2)自動丟棄視頻幀
同樣網絡繁忙時,還有一個方法,就是發送方是主動丟棄要發送的視頻幀,這樣在接收方看來,就是幀頻fps降低了。

 

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