2019年开源WebRTC媒体服务器选型比较

iefreer 发表于 2019-01-21 18:41:39

标签: webrtc, kurento, media server

- +
什么是WebRTC服务器?

在WebRTC的早期开始,该技术的主要卖点之一是它允许点对点(浏览器到浏览器)通信,几乎没有服务器的干预,服务器通常仅用于信令(比如用于连接代理)。 在这个应用阶段,一个专门的WebRTC媒体服务器的概念显得有点多余。


但是随着WebRTC应用场景变得复杂,比如在线视频会议,这个时候点对点通讯会遇到问题。下面,我将以视频会议为例尝试说明为什么媒体服务器很有用,它们通常提供什么类型的功能以及用户可以使用哪些开源替代品。

下图是一个基于点到点网状架构视频会议系统,

webRTC-Conference-with-Mesh-Architecture.png

虽然可以通过对等通信与多个参与者保持视频通话,但随着参与者数量的增加,它不再实用,因为要求对等方发送他/她的视频/音频流到每个参与者,同时接收每个参与者的视频/音频流。


实际上,即使在调优网络条件下,网状视频呼叫在超过五个参与者后就变得相当困难。为了解决这样的性能瓶颈,因此才额外引入了媒体服务器(Media Server)的概念。因为一个集中转发的架构方式有助于减少客户端需要发送的流的数量,通常只需要发送一个,甚至可以减少客户端需要接收的流的数量,这具体取决于媒体服务器功能。当然付出的代价是相应的服务端成本的提高。


当媒体服务器充当这种媒体中继时,它通常被称为SFU(Selective Forwarding Unit选择性转发单位),这意味着其主要目的是在客户端之间转发媒体流。还有一个MCU(Multipoint Conferencing Unit多点会议单元)的概念,MCU服务器不仅可以转发,而且可以对媒体流进行混合和编码压缩(比如把各个客户端的数据打包转发,和SFU相比,这样将大幅度降低转发数据的带宽需求,但对CPU有更高的要求)。

image.png

简而言之,媒体服务器的好处有如下几点:

  1. 扩展了系统性能和功能,来支持更为复杂的应用场景;

  2. 所有媒体流经由媒体服务器的一个好处是可以进行记录,这对于一些需要保留会议纪要的场景是非常有用的;

  3. 可以方便的和第三方系统进行集成,比如在Web系统和SIP电话系统(比如Asterisk)之间建立应用;

    integration-1024x1015.png

  4. 可以对媒体流进行额外的加工处理,比如通过人工智能人脸识别来给播客添加虚拟的帽子。

有哪些开源媒体服务器可用?

Jitsi Platform

Jitsi不仅是WebRTC媒体服务器,而且还有一个完整的平台。 Jitsi系列产品包括Jitsi Videobridge(媒体中继,SFU),Jitsi Meet(会议网络客户端),Jicofo(Jitsi Conference Focus),Jigasi(Jitsi Gateway to SIP)和Jitsi SIP Phone。借助Jitsi我们能在几个小时之内迅速搭建一个完整可用的通信平台。 它还使用Jingle(XMPP)和功能齐全的Web界面实现自己的信令控制。 然而,令人遗憾的是,它对于媒体录制没有提供稳定易用的解决方案。

Kurento Media Server

这是最通用的解决方案之一。 它不仅是一个媒体服务器,而且是一个开发工具包。Kurento的主要优势在于其多功能性,引入了媒体工作流的概念,允许在代码中定义媒体流的方式和位置。 这允许WebRTC开发者组合和集成非常有趣的特征,例如增强现实,AR计算机视觉(例如识别QR码,面部检测),实时媒体修改和与RTP(VoIP)服务互操作。Kurento可以配置为SFU或MCU,或两者兼备。

Janus WebRTC Gateway

虽然它的描述在任何地方都没有提到“媒体服务器”,但Janus可以很容易地设置为SFU。 其最显着的特征之一是其插件架构,可以增强服务的核心功能。有一些有趣的Janus用例,例如SIP Gateway,屏幕共享等。

mediasoup

这是一个相对较新而且有趣的媒体服务器,它与其他媒体服务器的不同之处在于它被设计成一个用于Node的开发库,这允许它可以被容易的集成到更大的应用程序中。

possitive(6) negative(0) views2882 comments0
私信 收藏 分享
分享到

发送私信

最新评论

请先 登录 再评论.
相关文章
  • WebGL Roadmap

    Unity 5.0 shipped with a working preview of our WebGL technology in March this year. Since then, Google has disabled (by default) NPAPI support in the...

  • JavaScript语言多编程范式简介

    和C++等语言类似,JS支持多范式(paradigms)编程。我们常常混合这些范式来完成一些大型Web项目。JS支持3种编程范式:命令式、面向对象和函数式。命令式(Imperative JavaScript)命令式就是简单的从上而下完成任务,流水账过程式编码风格:function

  • 常见面试题JavaScript闭包(ES5语法)

    JavaScript闭包(Closure)是常见的JS面试题,是否理解闭包是一个简单的区分JS初级和高级程序员的判例。几乎每个JS程序员都在使用闭包,有意或无意间。比如编写一个jQuery鼠标点击处理函数:$(function()

  • NodeJS、Java和PHP性能考量和若干参考结论

    首先需要说明的是,严格而言NodeJS和Java、PHP并非对等概念,NodeJS是基于JS的一个应用程序,而Java/PHP是语言。我们这里实际指的是分别使用node、java和php来实...

  • CSS3弹性布局内容对齐(justify-content)属性使用详解

    内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐。该操作发生在弹性长度以及自动边距被确定后。 它用来在存...

  • HTTP/2背景和新特性简介

    在前面的一篇文章中已经介绍了

  • 三维向量的简单运算和实用意义

    在WebGL的实际应用中我们广泛使用向量的几何运算来计算角度、距离,判断点线、点面之间的关系,比如物体之间的碰撞检测。本文简要介绍三维计算机图形学中常用的...

  • IE各版本CSS Hack(兼容性处理)语法速查表

    为了兼容IE各个版本,需要在CSS中添加额外的代码,比如以前常用的_width。之所以工作,是因为浏览器会忽略不能解析的样式规则,因此举个例子来说,把_width写在w...

  • WebGL入门教程3 - Canvas、Context、API和绘制一个矩形

  • WebGL入门教程1 - 3D绘图基础知识

    现代浏览器努力使得Web用户体验更为丰富,而WebGL正处于这样的技术生态系统的中心位置。其应用范围覆盖在线游戏、大数据可视化、计算机辅助设计、虚拟现实以及数...

  • Three.js 开发基础知识 - 绘制3D对象

    Three.js是一个用来简化WebGL开发的JavaScript库,比如绘制一个三维立方体,使用WebGL需要100多行,那Three.js只要10几行就能够完成。本文通过创建一个立方体来...

  • 如何使用CSS3实现一个3D商品标签

    使用3D缎带形状的标签是常见的一个设计模式,用在商品折扣、文章标题或网站推荐信息上,来突出显示重点内容,吸引用户视觉焦点。实现的方法有2种,一种是使用背...

  • 更多...