【征文 】WebRTC 流媒体常见开源方案综述

目录

前言

常见开源方案

一、Kurento

二、Mediasoup

三、 Pion

四、Jitsi

五、Janus

总结

前言

近两年,由于新冠疫情的影响,实时音视频通讯相关行业发展迅速,特别是视频会议、在线直播、直播带货等业务场景如雨后春笋遍地开花。同时,也涌现出了很多关于 WebRTC 优秀的流媒体服务器开源项目(不是说才出现,是才被大家注意到)。今天就来聊一聊比较常见的一些 WebRTC 流媒体服务器开源方案。

常见开源方案

一、Kurento

简单介绍

首先,通过项目本身的定位来了解 Kurento,官网对 Kurento 的定义:Kurento is an Open Source Software WebRTC media server,意思是:Kurento 是一个开源的 WebRTC 流媒体服务器。是的,Kurento 应该是比较早的 WebRTC 媒体服务器处理方案之一。

官网地址:Kurento

仓库地址:Kurento · GitHub

关键特色

如果没有流媒体服务器作为中介,那么浏览器之间都是直连的,也就是我们经常说的 P2P 方式,具体如下图所示:

一般常用的流媒体服务器,主要支持转码、组内通讯、录制等功能,具体如下图所示:

通过上图,我们可以知道两个浏览器之间通讯经过了流媒体服务器的中转,避免了两个浏览器之间的直连,因此,传输的流媒体内容也更加灵活,比如增加转码、美颜、特效叠加,还有云端录制等附加功能。

Kurento 在传统流媒体服务器功能的基础上,增加了很多新的特性,比如一些高级的媒体处理功能,包括计算机视觉、视频索引、增强现实和语音分析。 Kurento 模块化架构简化了第三方媒体处理算法(即语音识别、情感分析、面部识别等)的集成,这些功能都可以作为 Kurento 的可选内置特性存在,非常方便。

架构图解

Kurento 非常经典的架构图如下图所示:

发展现状

最近整体上,Kurento 活跃度呈下降趋势。原因可以追溯到5年前,它被 Twilio 收购了。Twilio 夺走了 Kurento 积累的技术和知识积累,给它留下了一个空壳。因此,造成现在的情况也是完全可以预见的。甚至维护 Kurento 项目的技术团队后来又开发了新的项目——OpenVidu, 并且内部也开始从 Kurento 向 mediasoup 的迁移。

如果这种状态一直发展下去的话,那么 Kurento 的没落肯定是无法避免的。因此,我们在技术选型的时候一定要考虑这个因素。当然,如果企业有非常专门的技术团队或者非常强大的自研能力,还是可以在这个方向上继续发力的。

二、Mediasoup

简单介绍

Mediasoup 官网对其的定位和评价还是非常高的:Cutting Edge WebRTC Video Conferencing,意思是顶尖的 WebRTC 视频会议产品。

官网地址:mediasoup

仓库地址:versatica · GitHub

关键特色

  1. 超强 SFU 功能凭借丰富的功能和灵活性,SFU 模式广泛应用在多方会议或者类似场景,正在逐步取代更加消耗资源的 MCU 模式。

  2. Node.js 模块Mediasoup 并不是创建了一个固定的单体服务,而是一个 Node.js 模块,可以集成到更大的应用程序中,也可以独立运行,具备非常灵活的移植能力。

  3. 客户端 SDKMediasoup 还提供了强大的 JS SDK,通过统一的 API 接口可以在任意浏览器上非常简单的构建出视频会议应用。

架构图解

Mediasoup 非常经典的架构图如下图所示:

发展现状

目前看来,Mediasoup 是一个很有前途的项目。最近几年,使用 Mediasoup 的用户数量正在快速增长,而且 Kurento 技术团队自己也开始使用 Mediasoup 代替自己原来的架构方案,貌似也为我们指明了方向,哈哈,技术方案没有绝对,具体因人而异,因公司而不同。

三、 Pion

简单介绍

官网对 Pion 的描述是这样的:The Modern Stack for Web Real-Time Communication,意思是现代的 Web 实时通讯框架,突出了新的特性,由于使用 Golang 语言开发,集成比较容易,开发周期可控。这是 Pion 最为出色的特点和优势。

官网:http://pion.ly

仓库地址:Pion · GitHub

关键特色

  1. API 简单

Pion 封装了 WebRTC 的常用接口,用户可以非常简单的集成使用。

  1. 构建快速

Pion 可以快速完成构建,配置也非常简单。

  1. 跨平台

Pion 使用 Golang 语言开发,而 Golang 语言具有天生跨平台的优势。

  1. 文档丰富

社区官方提供了非常丰富的文档,方便大家查阅。

  1. 开源

开源也是 Pion 最大的特色之一。

  1. 稳定性好

Pion 的稳定性非常好,已经被很多大型项目所验证。

发展现状

Pion 项目非常的有趣,它用 Golang 语言实现并封装了 WebRTC 的接口,并且推出了有很多相关的开源项目,利用这些项目,可以完成从客户端解决方案到 SFU 的所有工作。如果你从来没有接触过 WebRTC 的话,Pion 可能是一个最佳的解决方案。

四、Jitsi

简单介绍

官方对 Jitsi 的定位:More secure, more flexible, and completely free video conferencing,意思是更安全、更灵活且完全免费的视频会议,基本上也突出了 Jitsi 的特色:安全、灵活、免费。

官网地址:Free Video Conferencing Software for Web & Mobile | Jitsi

仓库地址:Jitsi · GitHub

关键特色

  1. Jitsi Videobridge 将每个人的视频和音频分别传递给所有入会的参与者,而不是将其混合后再发送出去。

  2. Jitsi 提供了更好的质量、更低的延迟,是一个更具可扩展性且成本更低的解决方案。

  3. Jitsi 与 Web 通信的开放标准 WebRTC 兼容。

  4. 高级视频路由支持同步广播、带宽估计、可伸缩视频编码和许多其他功能。

  5. Ubuntu 和 Debian 软件包易于安装。

架构图解

Jitsi 非常经典的架构图如下图所示:

发展现状

目前,Jitsi 项目的表现还是很棒的。8x8 从 Atlassian 手中收购 Jitsi 以后,对它做了进一步投资,这让 Jitsi 有了非常好的发展机会。Jitsi 本身功能丰富,而且非常适用于视频会议。当然,通过适当的修改,视频会议之外的其他场景可以支持的。

五、Janus

简单介绍

官方对 Janus 的定位是:the general purpose WebRTC server,意思是通用的 WebRTC 流媒体服务器。但是,这里我想唠叨一句,如果没有C和C++的技术积累,驾驭 Janus 项目还是很有难度的。

官网地址:Janus WebRTC Server (multistream): About Janus

仓库地址:Meetecho · GitHub

架构图解

Janus 非常经典的架构图如下图所示:

发展现状

近些年来,Janus 一直表现强劲,但是最近在新的项目中却越来越少看到它。有人把它的发展缓慢归因于其他开源项目的兴起和 meetecho 团队的重点转向了NDI和OBS,但是个人不赞成,自己认为是现在的项目都追求快,主要基于C语言开发的 Janus 才不占优势,毕竟开发周期和成本都太高了,才导致了 Janus 发展变缓了。但是从长期发展来看,Janus 还是很有优势的。

总结

本文介绍了五种 WebRTC 流媒体服务器的开源方案,它们都有各自的定位和特色,对 WebRTC 实时音视频通讯技术的发展都起到了一定的推动作用。作为开源方案,它们有非常多值得我们学习和借鉴的地方。如果我们想要开发自己的流媒体服务器,这五个开源项目都可以作为候选方案。但是,在技术选型时没有绝对的,我们需要根据自己具体的业务场景和技术储备情况挑选最合适的方案。希望本文介绍的内容可以帮到大家,感谢!

作者简介::smile:大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,:smile:公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!:smile:

推荐阅读
相关专栏
音视频杂谈
135 文章
本专栏仅用于分享音视频相关的技术文章,与其他开发者和声网 研发团队交流、分享行业前沿技术、资讯。发帖前,请参考「社区发帖指南」,方便您更好的展示所发表的文章和内容。