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

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

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

  1. 多人會議,每一個 Client 是建立多個 PeerConnection 仍是隻有一個 PeerConnection ?web

  2. 多人會議,誰來發起 OFFER,誰來做爲 ANSWER,如何把多個 Client 相互間的鏈接分別創建起來 ?服務器

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

WebRTC-PeerConnection.png


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

若是要再加入一我的,其實也是同樣的流程,假設新加入的人是 C,那麼,只須要 C 分別跟 A 和 B 交換 SDP 和 Candidate 便可創建新的通話鏈路。C 加入後,誰來主動發送 OFFER 呢 ?經常使用的策略有 2 種:ide

  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 如何從一對一通話到多人會議,就分享到這裏了,若有疑問的小夥伴歡迎來信 lujun.hust@gmail.com 交流。另外,也歡迎你們關注個人新浪微博 @盧_俊 或者 微信公衆號 @Jhuster 獲取最新的文章和資訊。

weixin_jhuster.jpg

相關文章
相關標籤/搜索