WebRTC是一个非常新的技术,很多用户仍然在初步摸索阶段。有一些用户是不清楚WebRTC的用户场景,不知道WebRTC究竟可以使用在哪些应用场景中。因此,很多用户针对WebRTC产品的选择或者和WebRTC的集成存在很多不同的看法或者对新技术的担心。如果读者对WebRTC技术和应用场景缺乏了解的话,读者可以查阅笔者的历史文章: 完整WebRTC技术及应用概要,此文章针对WebRTC技术和应用场景做了比较完整的介绍。今天,笔者不打算针对这些技术问题做其他详解。笔者主要讨论目前市场上WebRTC主要针对语音和视频相关的开源的WebRTC媒体服务器或引擎的功能概述和其特点。
在本文章中笔者主要针对关于WebRTC服务器的背景加以解释,然后WebRTC的WebRTC的视频会议处理方式进行讨论,最后针对目前市场上几个主流的开源WebRTC媒体服务器进行逐一介绍,包括它们的功能介绍和技术架构以及其各自的优缺点加以说明,希望读者在选择开源WebRTC 媒体服务器时能够做出自己一个合理的选择。
1、关于WebRTC媒体服务器的定义/MCU/SFU
WebRTC技术最初的使用架构是点对点的(浏览器之间的)通信,这也是其非常强大的一个优势,用户无需安装任何第三方插件自己和对端进行通信。但是,随着技术本身的不断发展和业务场景的复杂程度越来越高,用户场景中就需要一个WebRTC服务器端,媒体服务器或者WebRTC网关来进行媒体,信令管理或者转换处理。因此,市场上逐渐出现了各种针对WebRTC应用场景发布的一些开源的WebRTC服务器端开源项目。
另外,根据视频会议是WebRTC的主要卖点,因此关于WebRTC的处理方式,很多开源媒体服务器的架构有有所不同,有的服务器端支持MCU方式,有的支持SFU方式,还有的WebRTC服务器支持混合方式。
根据很多数据说明,在浏览器和云平台或者大容量的部署中,很多集成商选择了SFU模式,以便能够充分拓展,降低服务器的处理负载。当然,也有用户选择MCU的方式可以非常方便集中控制其服务器处理流程。两种方式各有其优缺点,这取决于用户使用场景和自己的集成方式。
图片来自于互联网资源
除了基于WebRTC的视频会议以外,WebRTC媒体服务器还可以支持各种流媒体的推送服务和直播等场景,还有和SIP对接集成的功能。因此,很多时候,WebRTC服务器端也可以作为一个WebRTC网关来使用,实现和传统PSTN电话系统的集成对接,实现信令转换处理。例如,通过Asterisk/WebRTC/SIP/FXO呼入呼出等场景。
下面,笔者逐一简单介绍目前市场上最热门的十大开源媒体服务器的功能和其各自特点,为用户在WebRTC开发和项目集成时提供一个指导和参考。
说明,因为很多开源项目不断在更新过程中,或者笔者理解有误,读者最好亲自查看官方最新技术动态做进一步核实。这里的指导意见仅是笔者一家之言。
2、Jitsi开源视频会议
Jitsi 平台是非常活跃的开源视频会议平台,其对标的视频会议产品是zoom,Google meet等视频会议平台。其视频会议功能意见非常完善,包括终端,服务器端,会议桥和录像,屏幕共享,即时消息,SIP网关接入/电话入会等功能。如果读者不熟悉的话,可以参考关于Jitsi视频会议安装的文档来进一步学习。
其基本特点:
- 功能完整,文档齐全,技术支持完善,提供很多自定义的接口,快速部署,SFU, 开发语言(java, lua)
- 非常庞大,安装的服务和界面管理系统配置文件比较多,源代码安装相对比较复杂。
3、Kurento 媒体服务器
Kurento 媒体服务器是真正的完整的多功能套件的媒体服务器,它不仅仅提供媒体服务器的功能,同时提供了很多的工具(脸部识别接口,二维码接口,对象追踪等比较新的识别技术),用户可以和第三方平台集成,同时可以支持非常灵活的媒体流自定义处理方式。它可以在一个实例中设置为MCU方式或者MCU方式。
其特点是:
功能灵活(流媒体广播,编码转换,),丰富的开发工具,灵活的媒体流处理流程, 开发语言(java),支持多种视频编码
文档齐全, 但是,社区互动不多,主要通过邮件列表。
4、’Mediasoup
mediasoup是相对比较新的一个WebRTC服务器端的开源项目。它更多是通过集成包方式和其他应用服务器来集成。它支持SFU模式,主要支持视频聊天,媒体流广播等。
技术架构如下:
其特点是:
- 通过底层API实现和第三方集成,安装简单,文档齐全
- 技术支持相对较弱,功能支持比较单一。
5、Janus
Janus是比较早期的WebRTC 服务器端的开源项目,官方对其定义是一个WebRTC服务器端,支持的功能比较丰富,通过core模块来支持不同的插件的方式。开发语言(C语言),代码架构比较清晰,支持了SIP 接口(补丁后的sofia)。
其特点是:
- 通过强大的core模块实现对插件的拓展,支持SFU模式,客户端集成相对比较简单
- 团队相对比较小,社区支持较弱
6、Licode
Licode是一个开源的WebRTC通信平台,提供了服务器端和客户端完整的产品配套。它支持视频会议,用户房间管理等非常灵活的功能,支持MCU模式。目前没有看到界面管理系统发布。
其特点是:
- 安装配置相对比较简单,专注于视频会议,房间功能开发相对比较灵活,完全WebRTC支持
- 社区支持较弱,视频会议拓展方式实现,目前没有看到无SIP接口
7、red5pro
Red5 Pro专注于视频直播和媒体流转发处理的WebRTC媒体服务器,支持服务器端和客户端SDK开发,支持的编码方式比较多。
其特点是:
- 流媒体直播功能比较丰富,支持多种客户端
- 文档和社区支持相对较弱
8、Ant-媒体服务器
Ant-Media-Server是从red5pro 克隆出来的开源项目,也支持了一个企业版的项目,它目前支持两个不同的版本:开源版本和企业版本。它支持SFU模式,目前支持了比较多的应用功能,并且支持了很多非常灵活的针对拓展功能,带宽调整优化,低延时等功能。更多应用在视频直播等场景中。
其特点是:
- 支持拓展方式,支持对各种编码,环境进行调整优化,实时录像支持(MP4和HLS),支持对社交媒体平台的媒体推送等,企业版本支持了很多非常实用的功能
- 社区版本支持的功能有限,企业版本功能相对比较多,用户选择操作困难
9、其他开源第三方WebRTC网关
除了以上几种独立的WebRTC媒体服务器以外,比较热门的基于语言的开源平台也逐渐发力,不断增加对WebRTC能力的支持。其中,Asterisk(SFU)和FreeSWITCH(MCU)都已经发布了多个版本支持WebRTC的视频会议功能,很多第三方集成商也在其平台逐渐增加了WebRTC的支持,通过第三方的sip.js 客户端实现企业级的视频会议功能。Kamailio也可以作为一个WebRTC网关服务器端实现WebRTC/SIP之间的信令处理。
还有另外一种方式是使用WebRTC 媒体服务器集成Asterisk或者FreeSWITCH实现WebRTC的呼叫中心,融合通信跨平台解决方案。
因为,Asterisk和FreeSWITCH都是实现的媒体服务器功能,因此在WebRTC的实现上没有太多的区别。因为,本身Asterisk或FreeSWITHC可以支持SIP/PSTN,这两个媒体服务器和WebRTC平台集成相对更加简单,这里不再讨论。关于PSTN和WebRTC的集成呼叫流程,读者可以参考:
FreePBX实现SIP/WebRTC和PSTN设备对接完整流程
10、总结
笔者介绍了关于WebRTC的媒体服务器的背景,同时结合目前市场上最流行的十大WebRTC媒体服务器端或网关服务器的技术,针对每个项目的不同特点做了一个简单概要。以上这些服务器端本身都有各自的特点和开发的目标,因此有一些服务器端不一定完全能够满足用户自己的需求,用户需要根据其特性和自己的场景来加以取舍,最终需要用户根据WebRTC 服务器端的产品定位,功能,支持能力和自己的需求来决定。
参考资料:
www.asterisk.org.cn
https://github.com/Red5/red5-server
https://github.com/ant-media/Ant-Media-Server/wiki
https://github.com/lynckia/licode
www.jitsi.org.cn
http://www.kamailio.org/events/2016-KamailioWorld/Day1/10-Lorenzo.Miniero-Janus-WebRTC-SIP-Gateway.pdf
http://www.kamailio.org/events/2014-KamailioWorld/day2/14-Anton.Roman.Portabales-WebRTC-Signaling.pdf