1、引言
近年来,直播竞答、网络游戏直播等新的实时音视频通讯场景不断推陈出新,并成为引领互联网娱乐风向的弄潮儿。实时音视频应用的爆发,也使得WebRTC(Web Real-Time Communication,网页实时通信技术,)技术成为了人们关注的焦点。如何打造自己的WebRTC 服务器呢?下面我先来介绍一下WebRTC 服务器的一些基本内容:
开源的WebRTC 服务器介绍
WebRTC服务端整体分析
通信优化
WebRTC的未来展望
首先,我们会先来了解下一些开源的服务器是怎么做的,我们做事情,在没有头绪的基础上,参考和模仿可能是一种必然流程,毕竟站在巨人的肩膀上,我们的视野才更加开阔。
其次,通过形形色色的开源服务器介绍和理解,我们初步的去分析一个WebRTC 服务器究竟包含哪些模块,又是一个什么样的组织架构和层次关系。后面在服务器搭建后面临的丢包和多人通话问题又有什么解决方式。最后就是展望一下整个WebRTC未来发展。
2、开源的WebRTC 服务器介绍
我们进入第一部分:WebRTC开源服务器介绍,这个模块我选择了我认为很有代表意义的3种类型的WebRTC 开源服务器
大而全的Kurento
务实主义的Licode
小而美的Mediasoup
2.1大而全的Kurento
之所以称Kurento为大而全,是因为Kurento 强大的滤镜和计算机视觉,我们看这张图:

Kurento功能图
通过这张图我们了解到Kurento不仅仅包含了普通流媒体服务器的SFU MCU Transcoding Recording等基本功能,还包含了强大的滤镜和计算机视觉处理功能,而且,在整体的功能上不仅仅包含WebRTC 模块还有很多其他协议支持,诸如SIP RTMP RTSP 等协议,更准确的说Kurento 更像是一个融合通信平台,而且Kurento,基于插件式编程方式,很容易扩展自己的功能模块。
Kurento 在应用中有哪些问题,或者说,哪些是优势,哪些是劣势呢,我们看下面:
优势:
文档齐全无论API使用文档,还是部署文档都很齐全
功能强大,强大的路径和计算机视觉处理
模块化编程,方便扩展,这是对开发者很友好的地方
使用方便,客户端服务端都有专门的API 组件 接入系统,而且服务器端提供了J2EE node.js两种接口文档,覆盖很齐全
劣势:
代码太多太庞大,可能需要开发者有足够的功力才能驾驭这把屠龙刀
还一个重要原因就是性能比较差
2.2小而美的Mediasoup
Mediasoup是一个很新的WebRTC服务器,专注WebRTC 的相关功能开发,专注做好这一件事,很小确很美。下面这样图是Mediasoup 大致的一个基本架构图:

Mediasoup 架构
Mediasoup
优势:
性能优秀
支持很多的WebRTC 新特性(PlanB UnifiedPlan simulcast)
同时支持ORTC和WebRTC 的互通
劣势:
功能比较少
代码和架构相对来比较晦涩一点
信令模块只提供node.js 版本
2.3务实主义的Licode
说了两款极端的WebRTCserver ,我们最后讲一个务实主义的Licode ,为什么称Licode 为务实主义?Licode 这款服务器完全是站在一个PAAS 平台,一个业务的角度去思考问题,去构建整个系统,很务实,很实际,我们看Licode架构图: