《聊聊 WebRTC 網關服務器》系列文章系由 WebRTCon2018 中網易雲信音視頻技術專家的分享內容《從零開始構建音視頻網關服務器》整理而成,該系列文章將和你們分享網易 NRTC 在 WebRTC 網關項目的自研過程當中遇到的一些問題,以及咱們最終的解決方法。《聊聊 WebRTC 網關服務器》第一篇文章將和你們分享如何選擇服務端的端口方案。git
在討論如何選擇服務器端的端口方案前,咱們先來看看標準 WebRTC 的鏈接創建流程,這爲咱們理解這篇文章後續內容提供最基礎的知識。github
這裏描述的是 Trickle ICE 過程,而且省略了通話發起與接受的信令部分。流程以下:web
在瞭解了標準 WebRTC 的建連流程之後,咱們來看看 WebRTC 客戶端如何與網關建連。算法
首先,咱們網關的 Media Server 擁有公網 IP,所以 Server 就不須要經過 Stun Server 收集自身的公網 IP。WebRTC 客戶端先與網關 Signal Server 協商 SDP,包括 ICE Candidate,Media Server 分配 IP 和端口做爲網關的 ice candidate 發送給客戶端。由於網關是公網 IP,因此客戶端向這個 IP 發送 STUN Binding Request 會被服務器收到, 並回復 Response。接着客戶端與網關媒體服務器進行 DTLS 握手與祕鑰協商,在此基礎上進一步進行 SRTP 的音視頻通訊。至此,WebRTC 客戶端與網關服務器建連成功。
好的,如今咱們已經具有了探討服務器端端口選擇的基礎知識,接下來咱們來看看具體有哪些方案。安全
最簡的服務器端端口方案是咱們能夠爲每一個客戶端分配一個端口,服務器上使用這個端口區分每一個用戶,就像圖裏描述的 A、B、C、D 四我的在 WebRTC 網關服務器上分別對應 UDP 端口 10001~1004。這種方案邏輯上很簡單,不少開源的服務器都採用這個方案,如 janus。另一個緣由是使用了 libnice 庫在服務器上來和客戶端作 ice 建連,相似的作法都是採用多端口的架構。
那麼多端口有什麼不足呢?服務器
爲了解決這個問題,咱們須要使用一些小技巧。首先,有幾個基礎知識點咱們先了解一下。以下圖:微信
有了上面的背景知識,聰明的大家確定已經大體有一個方案了。咱們來看看實現細節是怎麼樣的:網絡
在分享完服務端端口選擇的方案後,你們都知道 WebRTC 客戶端使用 PeerConnection 來表示不一樣的媒體鏈接,這對於 WebRTC 來講是基礎也是核心,在《聊聊 WebRTC 網關服務器》第二篇文章將繼續爲你們介紹如何選擇 PeerConnection 的方案。
隨着音頻處理和壓縮技術的不斷髮展,效果更好、適用範圍更廣、性能更高的算法和新的技術必將不斷涌現,若是你有好的技術或者分享,歡迎關注網易 MC 官方博客以及微信公衆號:**架構
關注更多技術乾貨內容: 網易雲信博客
歡迎關注 網易雲信 GitHub
歡迎關注 網易雲信官網官網微信公衆號:
運維