WebRTC 架構優化及實踐

2021-09-11 09:05:00 字數 2390 閱讀 4037

suo.im/597g90

目前幾乎所有主流瀏覽器都支援了 webrtc,包括 firefox、chrome、opera、edge。webrtc 1.0 的標準化程序也處於非常高階的階段。越來越多的公司正在使用 webrtc 並且將其加到自己的應用程式中。那麼,企業在構建 webrtc 應用時,應當注意什麼?本次演講將為你解讀:標準的 webrtc 系統的典型架構是怎樣的, webrtc 的坑與優化實踐、瀏覽器適配及平台相容性實戰等。

上文提到webrtc的前身是gips,而gips的發展其實分為兩個階段,第一階段為global ip sound,第二個階段為global ip solution。它在global ip sound 階段是作為音訊通訊引擎用於各種嵌入式系統裝置中,主要負責回聲消除、降噪、編譯碼等基礎功能。

之後繼音訊服務又加入了video服務,也就是global ip solution階段,後來在和客戶的溝通中他們不斷的加入ip通訊的協議、rtp協議等,以實現和網路連線的能力。但是由於商業上的不合理和銷售策略的失敗,最終還是被google以6千多萬美元的**給收購。

雖然webrtc有各種不同應用,但是由於目標不同,所以在結合webrtc本身能力上會有不同的側重點,需要針對性的檢視相應的**,找出其中有缺陷的部分並做出突破。比如要做saas和paas服務就要準備伺服器相關的工作。

使用的時候我們要根據服務質量要求和使用者特點靈活使用p2p,比如在大部分使用者都處於wifi環境的情況下p2p可能是更好的選擇,而對於4g網路p2p效果會差一些。

若使用者對服務質量要求比較高,個人建議應先著手建立伺服器,並部署運維監控負載均衡等能力,讓後端伺服器出現的問題對使用者無感知。

應用這些措施應對純web端的saas服務其實還有所不足,有很多細節問題仍需處理。比如使用者外接了音訊裝置,或者某款瀏覽器的音訊通訊產品在本機上沒有適配好,從而產生回聲等各種問題。

又因為底層不是自己做的,因此只能提醒使用者在使用服務的時候先測試一遍,或者給出一些其他建議。

所謂paas就是提供乙個平台給廠商使用,不同於saas它在上層應用上並沒有做的過於精細,其主要目標還是為了提供更穩定更高效的通訊服務。

在saas服務中,我們可以分析使用者行為,針對使用者的使用場景進行優化。但是paas服務中,使用者千差萬別,可能會涉及iot、教育、遊戲等個各種不同領域,原有的webrtc引擎肯定不夠用。

因此在包含saas的各種基礎服務之外,還需要抽象出一套api,然後再針對各個移動裝置做適配,還要根據應用場景提供多種增值功能,提供針對場景的特殊優化和包裁剪等。

當然前提是使用者有相當的經驗,能夠根據具體的場景定製化引數。

音訊部分在webrtc中一共封裝了4個模組,anm(網路模組)、apm、acm(編譯碼模組)、adm,對應的video也有同樣的4個模組,所以總共是8個模組。個人認為webrtc的重點就在於這8個模組本身和它們之間的引數配置。

但是這也帶來了相應的缺點,我們要做面向移動端的功能例項優化、效能例項優化以及一些特殊優化,這也使得除錯的次數越來越多。

只有在學習了webrtc的演算法之後,才能從不同的層面給客戶解釋清楚為什麼要採用當前方案以及為什麼不用其他方案。webrtc的精髓在於底層的引擎部分,不過要想對這部分有深入的理解,首先就要對其中的演算法有一定的研究。

apm

apm中涵蓋agc、ans、de和回聲消除的演算法nlp。接下我們逐步看下這裡面到底都是些什麼。

通常的回聲消除有兩種演算法,一種是自適應濾波,一種是nlp。在webrtc之前其實自適應濾波已經做的足夠好了,目前這方面的研究基本上已經停滯,可能在多通道和立體聲的回聲消除上還有一定的研究價值。nlp則不一樣,它還有很多細節值得**,這是因為每個聲腔的聲音設計不同,造成了非線性部分的差異。

webrtc中有兩個回聲消除模組分別是aec和ans,aec的nlp演算法考慮到了非常多的細節,如果想要研究它的演算法,可以好好的看下它的專利說明。

de是延時估計模組,現在幾乎所有的延時估計模組的都用的這一套演算法。agc主要任務是將非雜訊部分調高,雜訊部分調低,這裡的重點就在於如何區分雜訊,等於乙個降噪的問題。

webrtc中的agc是和vad放在一起的,vad採用的是gmm模型,通過統計學的方式來判斷當前是否是voice,然後在結合到agc上,所有雖然agc中的引數仍然要調整,但是演算法還是不錯的,可以直接拿來用。

acm

webrtc的編解碼器有ilbc、isac 、opus,ilbc是窄帶編碼器、isac是寬頻編碼器、opus是全帶的音訊和語音統一的編碼器。在cpu效能較強且能夠接受高頻寬的情況下opus可以做的非常好。

anm

我們知道丟包一般分為兩種,隨機丟包和bond丟包,擁塞就屬於bond丟包的範疇,比如連續丟失多個包或無法發包都算作擁塞。

anm中的plc是一種拉伸快進和慢放的演算法,比如要在100毫秒的包中存放200毫秒的資料的時候,plc就會將包給慢放以實現200毫秒的效果,通過這種方式來應對網路丟包。plc的優勢在於變速不變調。

WebRTC實踐總結

webrtc至少有兩件事必須要用到伺服器 1 客戶端之間交換建立通訊的元資料 信令 必須通過伺服器。我們在a和b需要建立p2p連線的時候,至少要伺服器來協調,來控制連線開始建立。而連線斷開的時候,也需要伺服器來告知另一端p2p連線已斷開 2 為了穿越nat和防火牆。如果客戶端a想給客戶端b傳送資料,...

RESTful架構及實踐

rest representational state transfer 即表現層狀態轉換,定義了資源的通用訪問格式,是一種網路應用程式的設計風格和開發方式。在概念中,需要理解以下幾個名稱 資源 resource 即伺服器上獲取到的東西任何資源,一條使用者記錄,乙個使用者的密碼,一張等等都是。資源的...

活動回顧 WebRTC服務端工程實踐和優化探索

接下來進入主題,今天的分享主要分為三個部分 第一,webrtc伺服器架構介紹及設計思路 第二,我們開發乙個伺服器所需要的技術和面臨的難點 第三,qos服務質量的實現及優化。一 webrtc伺服器架構介紹和設計思路 我們首先要想一下,為什麼需要webrtc伺服器?webrtc伺服器它的作用是什麼?在大...