中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WebRTC 開發實踐:為什么你需要 SFU 服務器

發布時間:2020-08-09 04:15:39 來源:網絡 閱讀:7086 作者:Jhuster 欄目:軟件技術

當你入門 WebRTC 之后,很快就會接觸到一個名詞,叫做:SFU,你可能很容易就在網上尋找到很多 SFU 的開源實現,并并興致勃勃地開始編譯、部署和測試這些服務器,但是可曾想過,為啥我們的 WebRTC 應用需要 SFU 服務器 ?

1 WebRTC P2P 通話的網絡模型

WebRTC 開發實踐:為什么你需要 SFU 服務器

如圖是 WebRTC P2P 模式下的網絡拓撲結構,ClientA 和 ClientB 如果能夠順利建立 P2P 的連接,則可直接通過 P2P 互相交換數據。如果由于某些網絡環境原因,無法成功打通 P2P 連接的話,則可以通過一臺 TURN Server 來中轉數據給對方。

這個 TURN Server 是指支持 TURN 協議 的服務器,它扮演著一種網絡中繼的角色,支持把一個 Client 的數據包透明轉發到多個其他的 Client 客戶端。

在這種簡單的 P2P 通話場景下,其實這種模型基本夠用了,根本不需要架設什么 SFU 服務器。

下面我們再近一步,看看多人通話的場景:

WebRTC 開發實踐:為什么你需要 SFU 服務器

如圖所示,多人通話跟單人通話唯一的不同就是每個客戶端都需要跟其他兩個端都分別建立 P2P 連接,我在《WebRTC 開發實踐:從一對一通話到多人會議》也介紹過這個場景。與一對一通話一樣,如果兩個端能夠順利建立 P2P 的連接,則直接通過 P2P 互相交換數據;如果無法打通,則利用 Turn Server 來中轉數據。

我們把這種完全使用 P2P 方式的網絡拓撲結稱之為 Mesh 結構,下面我們談談它的優劣點。

2 WebRTC Mesh 網絡拓撲結構的優劣

優點:

  • 邏輯簡單,容易實現

  • 服務端比較 “輕量”,TURN 服務器比較簡單,一定比例的 P2P 成功率可極大減輕服務端的壓力

缺點:

  • 每新增一個客戶端,所有的客戶端都需要新增一路數據上行,客戶端上行帶寬占用太大。因此,通話人數越多,效果越差

  • 無法在服務端對視頻進行額外處理,如:錄制存儲回放、實時轉碼、智能分析、多路合流、轉推直播等等

由此可以看到,mesh 結構的缺點影響還是比較大的,真正商業化的應用,是需要具備良好的通話質量、服務穩定性和可擴展性的,因此,亟需一種新的網絡拓撲結構,能夠很好的規避 mesh 結構的這些短板。

3 什么是 SFU ?

SFU 的全稱是:Selective Forwarding Unit,是一種通過服務器來路由和轉發 WebRTC 客戶端音視頻數據流的方法。

WebRTC 開發實踐:為什么你需要 SFU 服務器

如圖所示,SFU 服務器最核心的特點是把自己 “偽裝” 成了一個 WebRTC 的 Peer 客戶端,WebRTC 的其他客戶端其實并不知道自己通過 P2P 連接過去的是一臺真實的客戶端還是一臺服務器,我們通常把這種連接稱之為 P2S,即:Peer to Server。除了 “偽裝” 成一個 WebRTC 的 Peer 客戶端外,SFU 服務器還有一個最重要的能力就是具備 one-to-many 的能力,即可以將一個 Client 端的數據轉發到其他多個 Client 端。

這種網絡拓撲結構中,無論多少人同時進行視頻通話,每個 WebRTC 的客戶端只需要連接一個 SFU 服務器,上行一路數據即可,極大減少了多人視頻通話場景下 Mesh 模型給客戶端帶來的上行帶寬壓力。

SFU 服務器跟 TURN 服務器最大的不同是,TURN 服務器僅僅是為 WebRTC 客戶端提供的一種輔助的數據轉發通道,在 P2P 不通的時候進行透明的數據轉發。而 SFU 是 “懂業務” 的, 它跟 WebRTC 客戶端是平等的關系,甚至 “接管了” WebRTC 客戶端的數據轉發的申請和控制。

4 什么是 MCU ?

從上述 SFU 的定義可以看到,SFU 這種網絡拓撲模型,通過由 SFU Server 來實現 one-to-many ,減輕了多人視頻通話場景下每個客戶端的上行帶寬壓力,但是下行依然是多路流,隨著通話人數的增大,下行帶寬的壓力依然會成比例的增大,那能否讓下行也只剩一路流呢?—— 可以,通過在服務器端合流后再下發即可解決,如下圖所示:

WebRTC 開發實踐:為什么你需要 SFU 服務器

這種網絡拓撲結構,被稱之為 MCU,它的特點是,由 MCU Server 將各路客戶端上行的視頻流合成為一路,再轉發給其他客戶端。這種模型相比于 SFU 降低了多人視頻通話場景下客戶端的下行帶寬壓力,但是由于合流需要轉碼操作,對服務器端壓力比較大,而且下發給客戶端的流是固定的合流畫面,靈活性不是特別好。

5 為啥推薦選擇 SFU ?

綜上所述,純 mesh 方案無法適應多人視頻通話,也無法實現服務端的各種視頻處理需求,最先排除在商業應用之外。

SFU 相比于 MCU,服務器的壓力更小(純轉發,無轉碼合流),靈活性更好(可選擇性開關任意一路數據的上下行等),受到更廣泛的歡迎和應用,常見的開源 SFU 服務器有:Licode,Janus,Jitsi,mediasoup,Medooze 等等,各有特點,大家可以去項目主頁了解更詳細的情況。

當然,也可以組合使用 SFU + MCU 的混合方案,以靈活應對不同場景的應用需要。

5 小結

關于 WebRTC SFU 相關知識點就分享到這里了,如有疑問的小伙伴歡迎來信 lujun.hust@gmail.com 交流。另外,也歡迎大家關注我的新浪微博 @盧_俊 或者 微信公眾號 @Jhuster 獲取最新的文章和資訊。

WebRTC 開發實踐:為什么你需要 SFU 服務器

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌宁县| 梧州市| 荔浦县| 汉阴县| 泾川县| 汉中市| 内乡县| 宁国市| 南木林县| 平舆县| 阜城县| 砚山县| 无为县| 高台县| 普陀区| 康定县| 元朗区| 多伦县| 涟源市| 临沧市| 车险| 延庆县| 棋牌| 罗城| 特克斯县| 台北县| 额敏县| 汉源县| 商城县| 高淳县| 深泽县| 灵寿县| 长葛市| 宝清县| 正宁县| 池州市| 都兰县| 北安市| 山东| 临沭县| 皮山县|