实时音视频技术难点及解决方案
對于一個實時互動的音視頻系統而言,存在很多技術難點,有幾個比較重要的點:
首先是低延遲,如果要滿足比較流暢地進行實時互動,那么單向的端到端的遲延大概要在400毫秒以下才能保證流暢溝通;
第二點就是流暢性,你也很難想象在視頻過程中頻繁卡頓會有良好的互動;
第三點是回聲消除,回聲的產生是揚聲器播放的聲音經過環境反射被麥克風重新采集并傳輸給對方,這樣對方就會一直聽到自己的回聲,整個互動過程會非常難受;
第四點是國內外互通,隨著現在國內同質化產品越來越多,國內的競爭也異常激烈,很多廠商紛紛選擇出海,這時就需要做好海內外的互通;
第五點是海量并發,當然這不僅僅指實時音視頻了,基本對于任何一款互聯網產品而言都是必須要考慮的難點。
技術難點解決方案
關于這幾個技術難點,在這里跟大家分享一下ZEGO即構科技的解決思路和實踐經驗。
1、低延遲
首先,如果實時音視頻要保證低延遲,那么前端和后端的整個鏈條一定要做到極致的,比如前端的一些編碼算法、流控,甚至丟幀、追幀策略等等都要做到足夠好。另外,不同的業務場景下,編碼器的選擇也會有所區別,從而會帶來不同的編碼延遲,因此不同的業務場景能達到的延遲程度也是不一樣的。
其次,就是對推拉流網絡的選擇,通常的方案是讓需要實時互動的用戶通過核心語音視頻網絡——像BGP這樣的優質節點來做語音視頻傳輸,而對于一些特定場景來說,比如互動游戲會直播給一些圍觀用戶看,那么這里就需要做轉碼、轉協議、甚至混流,再通過內容分發網絡去分發。像 內容分發網絡本身天然就有做就近接入,但對于接入核心語音視頻網絡就需要有智能的調度策略來完成就近接入,以及跨運營商、跨區域的接入,比如可以采用上次登錄IP、常用IP和區域調度,甚至可以測速再去連接,當然網絡調度的策略也需要根據業務群的分布仔細規劃,甚至采用多個策略配置權重的方式。
2、流暢性
要實現流暢性也會有很多的技術難點和策略,我主要會介紹其中幾種。第一個是可以做動態伸縮的JitterBuffer,在網絡較差或者網絡抖動比較劇烈的情況下,可以適當增大JitterBuffer,從而降低一點點延遲來對抗抖動。
第二個是快播和慢播技術,在網絡較差的環境,可以在用戶無感知的條件下稍微降低播放速度,來應對短暫網絡抖動引起的立即卡頓,當網絡恢復可以加快速度追回來,但這種方式并非適合所有場景,比如對于節奏要求非常準確的唱歌場景,當播放速度稍微放慢就可以被感知。
第三個是碼率自適應,也就是以比較合適的碼率做動態傳輸,為了保證流暢度甚至可以調整幀率和分辨率。語音視頻引擎會根據當前網絡測速的結果和應用所期望的碼率,動態地調整碼率、幀率和分辨率,最終達到流暢觀看的用戶體驗。
第四個是分層編碼、傳輸控制,在推流端做一些分層的編碼,這樣在拉流端可以動態根據偵測到的網絡帶寬情況來拉取不同的數據去做渲染。分層編碼允許拉流端取選擇不同層次的視頻編碼數據,網絡情況好的時候,就拉取較多層次的數據;網絡情況差的情況下,就拉取基礎層次的數據。
第五個是動態調度,當在推拉流端監測當前推拉流質量比較差,而且即使通過降低碼率、幀率和分辨率等策略已經無法保證質量,這時就可以選擇放棄這條鏈路,直接重新做選入、建立連接,當然在這個過程中可能會出現短暫的停頓。
3、回聲消除
首先介紹下回聲消除的原理:對端發送的信號會先給到回聲消除的模塊,作為將來消除的參考信號,再把信號給到揚聲器播放,揚聲器播放后由于周圍環境反射形成回聲,與真實的音頻輸入一同被麥克風采集,這時采集到的輸入信號是帶有回聲的,回聲消除模塊會根據前面的參考信號生成濾波抵消掉回聲消后再發送出去。
原理聽起來會比較簡單,但在實際過程中卻蘊藏著很多的難點,比如回聲消除模塊接收的參考信號與最終被環境反射后的回聲本身就是存在差異的,此外設備也會極大的影響回聲消除,尤其是國內的安卓機型特別多,比如國內某手機廠商,從麥克風采集音頻數據到提交中間有將近一百毫秒的延遲,這時回聲消除算法如何適應這么長回聲延遲的手機就很關鍵;再比如很多用戶在直播中都會用外置聲卡,甚至是模擬器,這無形中也會帶來回聲的延遲。除了設備,場地同樣存在很大的相關性,對于普通會議室,設置 40米的回聲延遲可能已經足夠了,但一些大會場這種回聲延遲能達到將近上百米,這也是一種挑戰。
關于回聲消除,其實谷歌開源的WebRTC提供了回聲消除模塊,但WebRTC的設計本身是為了在PC端實時音視頻互動的場景,在移動端的適應性上就會差一些,尤其體現在安卓的一些低端機上。而相對來說,蘋果因為整體硬件、軟件全是自己實現的,麥克風、揚聲器也都有聲學模型設計,因此回聲消除的效果會比安卓好很多。即構科技的音視頻引擎都是采用自研,在真機和模擬器等1000多的機型上測試過,都可以做到很好的回聲消除。
4、 國內外互通
前面提到很多產品都會選擇出海,包括主打國內市場的產品也會有一些海外用戶,因此流媒體數據和控制信令就要做好跨國的互通,這就需要考慮在全球合理布置一些中繼節點。
這張圖就是一個典型的中繼續傳,北京用戶和迪拜用戶之間要做視頻溝通,根據就近接入原則他們會分別連接當地的節點,而這兩個節點間如果互拉,效果會非常差,這時就需要布置適合的中繼節點,比如香港、新加坡、日本等等,數據路徑的選擇是需要根據業務側決定的,也就是說在物理鏈路路由之上還要再有一條業務的路由表,需要根據用戶場景制定,包括用戶分布、用戶訪問頻率、高頻段峰值等等,可能每次的路由都會有所不同。
5、海量并發
海量并發是所有互聯網產品都會遇到的問題,這里就不再展開,主要要考慮負載均衡,如何平滑擴容,對于無法覆蓋的地方要做代理調度,甚至需要考慮容災、接入層的設計等等。
實時語音視頻的技術門檻相對比較高,如果依靠自己研發,可能即使會投入很多開發成本也無法與匹配市場快速發展的節奏。現在實時音視頻云服務已經十分成熟,其實不妨“讓專業的人去做專業的事”。
總結
以上是生活随笔為你收集整理的实时音视频技术难点及解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 林内热水器说明书(最新林内燃气热水器选购
- 下一篇: 网调什么意思