天天看點

WebRTC從一對一到多對多

為了讓初學者快速起步把 WebRTC demo 跑起來,我寫了一個極其簡單的 startup demo 項目,展示了如何基于 WebRTC API 實作一對一的視訊通話。該項目位址:https://github.com/Jhuster/RTCStartupDemo

本文則主要介紹如何從一對一通話更新到多人通話,即視訊會議,其中涉及到如下幾個問題:

多人會議,每個 Client 是建立多個 PeerConnection 還是隻有一個 PeerConnection ?

多人會議,誰來發起 OFFER,誰來作為 ANSWER,如何把多個 Client 互相間的連接配接分别建立起來 ?

首先,我們用下面這一張圖來看看兩個 WebRTC Peer 之間是如何建立一對一通話鍊路的:

WebRTC從一對一到多對多

在一對一通話場景中,每個 Client 均建立有一個 PeerConnection 對象,由一方主動發 OFFER SDP,另一方則應答 ANSWER SDP,最後雙方交換 ICE Candidate 進而完成通話鍊路的建立。

如果要再加入一個人,其實也是一樣的流程,假設新加入的人是 C,那麼,隻需要 C 分别跟 A 和 B 交換 SDP 和 Candidate 即可建立新的通話鍊路。C 加入後,誰來主動發送 OFFER 呢 ?常用的政策有 2 種:

每當有新的成員加入到房間後,房間内的每個人主動給新成員發 OFFER,并等待他回複 ANSWER 建立新的 PeerConnection 連接配接

每當有新的成員加入到房間後,新成員主動給房間的每個人發 OFFER,并等待 ANSWER 建立新的 PeerConnection 連接配接

當然,還有其他的政策,無非就是誰主動扮演 OFFER 發起者的角色觸發整個建聯過程而已。

WebRTC從一對一到多對多

如圖所示,3 人會議,則每個人都會建立 2 個 PeerConnection 分别與其他兩個人建立通話連接配接。

我這裡實作了一套 Web 端 3 人連麥會議的 demo 代碼,完整地複現了上述場景和邏輯,大家有興趣可以看一看:

https://github.com/Jhuster/RTCStartupDemo/tree/master/RTCClientDemo/Web/multiple

本文一直描述的是通過多 PeerConnection 的方案來實作多人會議,那麼,是否也可以僅僅使用單個 PeerConnection 呢 ?答案是肯定的,不過這需要伺服器端的參與,讓多路流通過一個 PeerConnection 連接配接端口進行傳輸,到端上再利用 ***c 等資訊提取和分離出來,整體來說要複雜很多,但是也是有不少好處的。

有一篇文章關于單 PeerConnection 和多 PeerConnection 的優劣分析,有興趣的小夥伴可以看看,連結如下:

《WebRTC RTCPeerConnection. One to rule them all, or one per stream?》

簡單來說,多 PeerConnection 會導緻連接配接到 SFU 伺服器的連接配接數量超多,對服務端的壓力是比較大的;另外,多 PeerConnection 也比單 PeerConnection 要消耗更多的資源。而單 PeerConnection 雖然整個邏輯複雜,但是在上述這兩點上還是有一些不錯的優化的。

關于 WebRTC 如何從一對一通話到多人會議,就分享到這裡了,如有疑問的小夥伴歡迎來信 [email protected] 交流。另外,也歡迎大家關注我的新浪微網誌 @盧_俊 或者 微信公衆号 @Jhuster 擷取最新的文章和資訊。

轉載至:https://blog.51cto.com/ticktick/2348008

繼續閱讀