WebRTC生態系統是很是龐大的。當我第一次嘗試理解WebRTC時,網絡資源之多讓人難以置信。本文針對webRTC媒體服務器和相關的開源項目(如kurento,janus,jitsi.org等)作一些介紹。而且將嘗試下降理解WebRTC的業務價值所須要的技術門檻。html
自從WebRTC誕生之初以來,該技術的主要賣點之一是它能夠進行點對點(browser-to-browser)通訊,而幾乎不須要服務器的干預,服務器只用來發送信令。WebRTC媒體服務器的概念同p2p相比是相反的。web
下面,我將試圖說明爲何媒體服務器是有用的,他們一般提供什麼類型的功能以及相應的可供用戶使用的開源方案有哪些。瀏覽器
儘管確實可使用p2p通訊(圖1網格體系結構)來讓多點用戶保持視頻通話,但隨着用戶數量的增長,此方案變的再也不實際,由於須要一個用戶將他/她的視頻/音頻流傳輸給其他每一個用戶,同時接收其他每一個用戶的視頻/音頻流。服務器
事實上,即便在最優的網絡條件下,正常的mesh視頻通話也不能超過5個用戶。這是媒體服務器派上用場的地方,由於它能夠減小客戶端須要發送的流的數量,同時也能減小客戶端須要接收的流的數量,其效果取決於媒體服務器性能。網絡
當一個媒體服務器充當這種中間人的角色時,它一般被稱爲SFU(單一轉發單元 Single Forwarding Unit),這也就意味着它的主要目的是在客戶端之間轉發媒體流。架構
還有一個MCU(多點會議單元 Multiponit Conferencing Unit)的概念,這樣的服務器不只僅可以轉發媒體流,也能對經過它的媒體流進行處理(例如,將全部視頻或音頻流混合爲一個)。ide
讓全部視頻流經過媒體服務器(羣集)的主要好處之一是能夠對媒體流進行出於任何目的的錄製和存儲,這在mesh架構上很難作到。開源項目介紹
使用媒體服務器的另一個優勢是可以同web系統以外的其它系統進行通訊,例如經過SIP中繼的PSTN或者經過RTMP進行流傳輸的服務(像Fackbook直播或者Youtube直播流)。工具
你能夠看到以前博客的一個實例,在此實例中Kurento媒體服務器用來在瀏覽器和SIP電話之間進行視頻通話。性能
一些媒體服務器容許對視頻和音頻流作底層上的處理,好比可以在視頻上運行計算機視覺模型或者將音頻流發送到語音識別引引擎,例如google Speech。這些功能將webrtc提高到另一個層次。依我看來,它提供了更加豐富和創新性的實時交互,爲一個普通的通訊平臺增長了不少價值。
咱們以前討論過此問題,Kurento媒體服務器將人臉識別模型應用到了視頻流上,在人的頭上戴了一頂帽子。
如前所述,WebRTC生態系統很是龐大,市面上由不少開源項目。
下面是最成熟和受歡迎的:
Jitsi不只僅是一個WebRTC媒體服務器,而是圍繞者webrtc構建了一整個平臺。 Jitsi系列產品包括Jitsi Videobridge(媒體中繼,SFU),Jitsi Meet(會議web客戶端),Jicofo(Jitsi Conference Focus),Jigasi(Jitsi Gateway to SIP)和Jitsi SIP Phone。 Jitsi平臺最吸引人的特性是它包含了在數小時內啓動和運行的通訊平臺的全部功能。它還使用Jingle(XMPP)和功能齊全的Web interface實現了本身的信令。遺憾的是,它沒有一個穩固易用的媒體錄製功能實現。
這是最通用的解決方案之一。它也不只僅是一個媒體服務器,而是構建了一個工具包。
Kurento的主要優勢是經過引入媒體工做流(meidia workflow)的概念實現了多功能性,它容許在代碼中定義媒體流以何種方式傳輸以及傳到到哪裏。這就容許WebRTC開發者將很是有趣的功能進行集成,例如計算機視覺(例如識別QR碼,面部檢測),實時媒體修正和與RTP(VoIP)服務的互操做。 Kurento還能夠在單個實例中配置成SFU或MCU(或者同時使用)。
雖然它的描述中沒有提到「meidia server」,但Janus能夠很容易地將其設置爲SFU。其最顯着的特徵之一是其插件架構,能夠加強服務的核心功能。有一個演示頁面,顯示了一些有趣的Janus用例,例如SIP Gateway,屏幕共享等。
一個相對較新且有趣的媒體服務器,它與其餘媒體服務器的不一樣之處在於它被設計爲一個Library(用於Node),容許它集成到更大的應用程序中。