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

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

EasyRTC視頻通話系統

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

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

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

1、語音通話

一、基礎模型

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

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

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

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

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

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

二、高級功能

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

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

(1)迴音消除

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

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

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

(3)抖動緩衝區

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

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

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

固然,JitterBuffer的緩衝深度不是一直不變的,而是根據網絡抖動程度的變化而動態調整的。當網絡恢復到很是平穩通暢時,緩衝深度會很是小,這樣由於JitterBuffer而增長的播放延遲就能夠忽略不計了。

(4)混音

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

2、視頻通話

一、基礎模型

視頻通話的概念模型與語音徹底一致:

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

通常而言,一個攝像頭能夠支持多種不一樣的採集分辨率和採集幀頻,而不一樣的攝像頭支持的分辨率的集合不同。好比如今有不少高清攝像頭能夠支持30fps的1920*1080的圖像採集。

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

二、高級功能

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

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

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

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

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


相關文章
相關標籤/搜索