天天看點

揭開webRTC媒體伺服器的神秘面紗——WebRTC媒體伺服器&開源項目介紹

#揭開webRTC媒體伺服器的神秘面紗——WebRTC媒體伺服器&開源項目介紹

WebRTC生态系統是非常龐大的。當我第一次嘗試了解WebRTC時,網絡資源之多讓人難以置信。本文針對webRTC媒體伺服器和相關的開源項目(如kurento,janus,jitsi.org等)做一些介紹。并且将嘗試降低了解WebRTC的業務價值所需要的技術門檻。

![](http://qiniu.harlanc.vip/7.2.2018_11:26:48.png)

## 何為WebRTC伺服器?

自從WebRTC誕生之初以來,該技術的主要賣點之一是它可以進行點對點(browser-to-browser)通信,而幾乎不需要伺服器的幹預,伺服器隻用來發送信令。WebRTC媒體伺服器的概念同p2p相比是相反的。

下面,我将試圖說明為什麼媒體伺服器是有用的,他們通常提供什麼類型的功能以及相應的可供使用者使用的開源方案有哪些。

## 視訊通話中的多點使用者

![](http://qiniu.harlanc.vip/7.2.2018_11:38:37.png)

盡管确實可以使用p2p通信(圖1網格體系結構)來讓多點使用者保持視訊通話,但随着使用者數量的增加,此方案變的不再實際,因為需要一個使用者将他/她的視訊/音頻流傳輸給其餘每個使用者,同時接收其餘每個使用者的視訊/音頻流。

事實上,即使在最優的網絡條件下,正常的mesh視訊通話也不能超過5個使用者。這是媒體伺服器派上用場的地方,因為它可以減少用戶端需要發送的流的數量,同時也能減少用戶端需要接收的流的數量,其效果取決于媒體伺服器性能。

當一個媒體伺服器充當這種中間人的角色時,它通常被稱為SFU(單一轉發單元 Single Forwarding Unit),這也就意味着它的主要目的是在用戶端之間轉發媒體流。

還有一個MCU(多點會議單元 Multiponit Conferencing Unit)的概念,這樣的伺服器不僅僅能夠轉發媒體流,也能對通過它的媒體流進行處理(例如,将所有視訊或音頻流混合為一個)。

## 視訊錄制

讓所有視訊流通過媒體伺服器(群集)的主要好處之一是可以對媒體流進行出于任何目的的錄制和存儲,這在mesh架構上很難做到。

## 同其它通信技術內建

使用媒體伺服器的另外一個優點是能夠同web系統之外的其它系統進行通信,例如通過SIP中繼的PSTN或者通過RTMP進行流傳輸的服務(像Fackbook直播或者Youtube直播流)。

你可以看到之前部落格的一個[執行個體](https://webrtc.ventures/2017/02/kurento-asterisk-powerful-couple/),在此執行個體中Kurento媒體伺服器用來在浏覽器和SIP電話之間進行視訊通話。

## 媒體流的處理

一些媒體伺服器允許對視訊和音頻流做底層上的處理,比如能夠在視訊上運作計算機視覺模型或者将音頻流發送到語音識别引引擎,例如google Speech。這些功能将webrtc提升到另外一個層次。依我看來,它提供了更加豐富和創新性的實時互動,為一個普通的通信平台增加了很多價值。

我們之前讨論過此問題,Kurento媒體伺服器将人臉識别模型應用到了視訊流上,在人的頭上戴了一頂帽子。

## 有哪些OSS開源媒體伺服器可供選用??

如前所述,WebRTC生态系統非常龐大,市面上由很多開源項目。

下面是最成熟和受歡迎的:

[Jitsi Platform](https://jitsi.org/jitsi-meet/)

![](http://qiniu.harlanc.vip/7.4.2018_7:02:31.png)

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 Media Server](https://www.kurento.org)

![](http:/qiniu.harlanc.vip/7.4.2018_7:10:37.png)

這是最通用的解決方案之一。它也不僅僅是一個媒體伺服器,而是建構了一個工具包。 

Kurento的主要優點是通過引入媒體工作流(meidia workflow)的概念實作了多功能性,它允許在代碼中定義媒體流以何種方式傳輸以及傳到到哪裡。這就允許WebRTC開發者将非常有趣的功能進行內建,例如計算機視覺(例如識别QR碼,面部檢測),實時媒體修正和與RTP(VoIP)服務的互操作。 Kurento還可以在單個執行個體中配置成SFU或MCU(或者同時使用)。

[Janus WebRTC Gateway](https://janus.conf.meetecho.com)

![](http://qiniu.harlanc.vip/7.4.2018_7:20:32.png)

雖然它的描述中沒有提到“meidia server”,但Janus可以很容易地将其設定為SFU。其最顯着的特征之一是其插件架構,可以增強服務的核心功能。有一個[示範](https://janus.conf.meetecho.com/demos.html)頁面,顯示了一些有趣的Janus用例,例如SIP Gateway,螢幕共享等。

[mediasoup](https://mediasoup.org)

![](http://qiniu.harlanc.vip/7.4.2018_7:24:38.png)

一個相對較新且有趣的媒體伺服器,它與其他媒體伺服器的不同之處在于它被設計為一個Library(用于Node),允許它內建到更大的應用程式中。

[原文連結](https://webrtc.ventures/2017/11/a-guide-to-webrtc-media-servers-open-source-options/)

繼續閱讀