WebRTC 開發實踐:從一對一通話到多人會議

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

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

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

  2. 多人會議,誰來發起 OFFER,誰來作爲 ANSWER,如何把多個 Client 相互間的連接分別建立起來 ?

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

WebRTC-PeerConnection.png


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

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

  1. 每當有新的成員加入到房間後,房間內的每個人主動給新成員發 OFFER,並等待他回覆 ANSWER 建立新的 PeerConnection 連接

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

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

WebRTC-多人會議.png

如圖所示,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 獲取最新的文章和資訊。

weixin_jhuster.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章