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),容许它集成到更大的应用程序中。