WebRTC 开源生态系统非常庞大,而且与日俱增。它涵盖了很多方面: 浏览器、桌面、移动设备、服务器、物联网等。
从提供一个 WebRTC 功能(如录制音频文件)的单一库到可随时部署的完整通信平台,您可以获得所需的一切。作为开发人员,这就像在超市购物一样!
在一年多的时间里,我开始独自列举我发现的一些优秀 WebRTC 库。我的目的并不是要列出一个清单,而是想发现新事物并比较不同的解决方案。我经常被问到 “我应该用什么解决方案来做……”,而且大多数时候这个话题对我来说也是新的 ),所以这是一种发现新库和开源组件的方式。
最近,我将这份 WebRTC 开源列表排入了前 100 名,并认为分享这份列表可能会很有趣。这既不是 “名人堂”,也不是 “奥斯卡 “提名名单,而只是一份 WebRTC 开源软件清单,涵盖了当今大多数令人担忧的问题。
注:我撒了点小谎,其中列出的库不到 100 个…
如何组织?
百强榜分为几个类别:
- WebRTC 堆栈
- 媒体平台
- 媒体服务器
- Turn 服务器
- 信令服务器
- 独立库
对于每个类别,我都尝试根据 GitHub 中的星级数量和过去一年(自 2022 年 8 月起)的增长情况对开源进行排序。
我还尝试为每个类别建立自己的 WebRTC 开发者象限。请记住,我不是来自Gardner😎,也不是分析师,这只是我今天的感悟,也是展开讨论、获得反馈的一种方式,也许还可以看看我可能错过的其他项目。
类一:WebRTC 堆栈
第一部分针对现有的 WebRTC 堆栈。
以下是每个堆栈的一些附加详细信息。
Stacks | Stars | Growth | Usage |
---|---|---|---|
LibWebRTC | ? | ? | C/C++ Browsers Mobile Desktop |
Pion | 11k | High | Go Server IoT |
React-Native WebRTC | 4,3k | Medium | JavaScript Mobile |
Flutter | 3,7k | Medium | Dart Mobile |
AIORTC | 3,5k | Medium | Python Server IoT |
WebRTC.rs | 3,2k | Very High | Rust Server |
Node-WebRTC (2) | 2,6k | = | Node.js Server |
LibDataChannel | 1,2k | Very High | Node.js Server |
SipSorcery | 1,1k | Very High | C# Desktop Server Unity/Xbox |
RawRTC (1) | 0,36k | Low | C/C++ Native |
Werift (3) | O,33k | Very High | Node.js Server |
即使我们不能与原始的 LibWebRTC 相提并论,但在浏览器之外、在谷歌堆栈无法访问的环境中运行的其他堆栈也在显著增长。
其中,Pion 引起了大多数人的兴趣。Pion背后的原作者 Sean DuBois 成功地建立了一个伟大的社区,最近还出现了一些令人兴奋的新用例,比如在OBS中增加了使用WebRTC进行流媒体直播的可能性。如果有机会,我想使用 Pion。但我需要先学习Go。
至于其他的,在 ALE 中,我们将SipSorcery等用于Rainbow C# SDK。它允许我们的开发人员为桌面和服务器构建具有 WebRTC 功能的本地应用程序。例如音频/视频 P2P 和群组呼叫,以及通过我们的 WebRTC 网关或 Rainbow Hub Cloud PBX 进行混合呼叫。我们还有一些通过 Unity 面向 Metaverse/VR/AR 世界的优秀项目。
对于我们的 Rainbow 移动应用程序和移动 SDK,我们使用 LibWebRTC。我们还为需要的用户提供了 React-Native SDK,但由于 RT 移动应用程序的开发比较复杂(本地呼叫集成、后台模式、推送……),我们更倾向于使用本地语言开发 UCaaS 客户端,并针对每个平台进行优化,以提供最佳体验。
(1) RawRTC 不活跃, (2) Node-WebRTC 不活跃, (3) Werift 不完整且与其他产品处于同一水平。
类二:完整 WebRTC 解决方案
完整解决方案是基于 WebRTC 的协作和/或视频平台,同时提供服务器端和终端用户应用程序。这里需要的是 IT/DevOps,而不是开发技能。有些解决方案完全不基于视频,但都使用 WebRTC 或 WebRTC 的部分功能。
Media Platforms | Stars | Growth | Usage |
---|---|---|---|
Rocket.chat | 36,1k | High | JS/Node.js Collaboration and Communication/Chat OmniChannel + Video (using Jitsi/BBB/…) |
WebTorrent | 28,1k | Medium | JS/Node.js WebTorrent/Video Streaming |
Mattermost | 26,1k | High | Go(Pion)/JS Collaboration and Communication Video platform |
Jitsi Meet | 20,1k | Medium | Java/JS/Native WebRTC conference server to host + applications and SDK |
SnapDrop | 16k | Medium | JS/PWA Share files like AirDrop |
Tinode | 10,5k | Medium | Go (server) JS/Swift/Android/Python Instant messaging server |
BigBlueButton | 8k | Low | Freeswitch/Kurento Virtual Classroom Software (integrated to Moodle) |
ShareDrop | 6,7k | High | JavaScript Files sharing like AirDrop |
WebWormHole | 1,7k | Low | WebAssembly/Go Data sharing |
OpenVidu | 1,6k | Low | Kurento Video platform with ready to integrate video components |
Briefing | 1,2k | Low | Node.JS/Web based on Simple-Peer/IOS client Mesh conference server |
Galene | 0,8k | Medium | Go (Pion)/JS Easy to deploy SFU Video Server with JS client (Android in progress) |
Rocket.chat 和 MatterMost 是集成功能最多的开源通信平台。如果您需要的不仅仅是视频服务器,还有其他领先产品。
BBB 是教育领域的最佳选择。在法国,政府已决定为我们的孩子使用它: [法国教育部选择了 bigbluebutton]
对于想要控制 WebRTC 的开发人员来说,Jitsi(诞生于阿尔萨斯)是最容易部署的解决方案,同时具有完全可集成、可定制和可调 (WebRTC) 功能。
类三:WebRTC 媒体服务器
这个类别针对的是提供完整媒体服务器的开源库,媒体服务器允许多个用户至少使用音频、视频、共享和即时消息进行实时交互。
Media Servers | Stars | Growth | Usage |
---|---|---|---|
SimpleRealtime Server | 22,3k | Low | C/C++ HLS/WebRTC/RTMP Publish (push) and subscribe (play) server model |
Janus | 7,3k | High | C/C++ SFU/SIP Gateway General purpose based on plugins |
MediaMTX | 7,2k | High | Go SRT/WebRTC/RTSP/RTMP Media broker |
MediaSoup | 5,4k | High | C++/Rust/Node.js SFU Client and server |
LiveKit | 5,3k | Very High | Go with Pion SFU SDK for a lot of platforms |
Pion Ion (1) | 3,8k | Medium | Go/Flutter SFU Several SDKs |
Ant-Media | 3,8k | High | Java HLS/RTMP/RTSP/WebRTC SDK for all platforms |
Kurento NEW Kurento (2) | 3k | Flat | C++ SFU/MCU media transmission, processing, recording, and playback and computer vision |
Licode | 3k | Flat | C++/Node.js MCU Streaming and recording |
Jitsi-VideoBridge | 2,7k | Low | Java/Kotlin SFU</br/>Highly scalable |
Freeswitch | 2,5k | Low | C/C++ PBX/IVR/Conferences Interconnect Phone and WebRTC |
WebRTC-Streamer | 2,3k | Medium | C++ V4L2/RTSP/WebRTC Streamer accepting multiple formats, to Web, Jitsi, Janus |
OvenMediaEngine | 2,2k | Flat | C/C++ WebRTC, SRT, RTMP, RTSP, and MPEG2-TS over HTLS Sub-Second Latency Streaming Server for large scale |
Kamailio | 1,9k | Flat | C/C++ VoIP/SIP Gateway, WebRTC Open Source SIP Server with WebRTC to interconnect with PBX |
Go2RTC | 1,8k | Medium | Go Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MP4, MJPEG, HomeKit, FFmpeg |
Asterisk | 1,6k | Low | C PBX/PSTN/VoIP/WebRTC Open Source PBX and telephony toolkit |
MiroTalk SFU | 1,4k | Medium | C++/Node.js SFU Based on MediaSoup) |
RTSPToWeb | 1,3k | Medium | Go RTSP/WebRTC converts your RTSP streams to formats consumable in a web browser |
Medooze | 1,2k | Low | C++ (+ Node.js/Go integration) MCU WebRTC Media Server |
Membrane | 1k | Low | Elixir/C++ SFU/Processing/Transcoding Advanced multimedia processing framework |
Ion-SFU | 0,86k | Medium | Go SFU Low dependencies SFU. Used by Livekit |
Broadcast-box | 0,32k | Medium | Go Broadcast server using Whip |
JellyFish | 0,05k | Low | Elixir RTSP/HLS/WebRTC Based on Membrane |
InLive Hub SFU | 0,02k | Low | Go SFU Based on Pion |
这份列表中既有成熟的 WebRTC pur 服务器实施,也有源自 VoIP 系统的服务器,还有 Pion Stack 使用的新服务器。还有一些流媒体服务器增加了 WebRTC 兼容性。
Golang 语言受到了真正的推崇。这也是学习这种语言的第二个原因。
最后,根据您的需求,您可以有多种选择。
(1) Pion Ion,似乎自 2022 年年中就不再活跃 (2) Kurento: 该 git 似乎自 2022 年末起不再活跃。
类四:TURN 服务器
TURN 服务器是一种附加设备(无论是否需要),可让复杂网络背后的用户连接到您的解决方案。
我已经写过一篇文章和 Coturn 中现有的 TURN 服务器。下面是另一份名单:
TURN servers | Stars | Growth | Language |
---|---|---|---|
Coturn | 9,5k | Very High | C/C++ |
Pion Turn | 1,5k | Medium | Go |
Turn-RS | 0,2k | Low | Rust |
Eturnal | 0,2k | Medium | C/Erlang |
Violet | 0,1k | Medium | C |
毫无疑问,如果您需要一个强大的 TURN 服务器,Coturn 是使用和部署最多的服务器。尽管经历了一段困难时期,但 Coturn 现在又成为了一个强大的开源软件,有多个贡献者(ALE 的 thib-ack就是其中之一 )。
如果您正在寻找替代方案,ProcessOne 的 Eturnal 也是一个不错的选择。Pion Turn 并不是一个 “可立即配置 “的 Turn 服务器,而是一个工具包,用于构建集成到解决方案中的自己的 Turn 服务器。
类五:WebRTC 信令服务器
信令服务器是在两个或多个参与者之间交换 P2P 或电话会议所需的所有信息的服务器。它包括协商通话、管理通话和结束通话所需的信息。通常,WebRTC 信令消息与该服务器内的纯粹功能消息混合在一起。
由于主要参与者使用各自的信令方法和协议,因此很难在此定义一个象限。
Signaling servers | Stars | Growth | Usage |
---|---|---|---|
ActivityPub-Mastodon | 43,4k | Very High | Ruby/Node.js Social network server |
Matrix-Synapse | 11,2k | Low | Python Open protocol for decentralised, secure communications |
Simple-Peer (1) | 6,9k | Medium | Node.js/JS P2P and Mesh |
Ejabberd/Jingle (3) | 5,6k | Medium | Erlang/OTP Robust, Ubiquitous and Massively Scalable Messaging Platform (XMPP, MQTT, SIP Server) |
Matrix-Dendrite | 4,8k | Low | Go Open protocol for decentralised, secure communications Matrix second generation |
PeerJS | 3,9k | Low | Node.js/JS P2P signaling server |
OpenFire/XMPP | 2,7k | Low | Java Real time collaboration (RTC) server |
SIP.js | 1,7k | Low | SIP, JS WebRTC/SIP signaling library |
OpenEasyRTC | 0,31k | Flat | Node.js Rooms, Chat |
Protoo-Client (2) | 0,2k | Low | Node.js Minimalist and extensible Node.js signaling framework |
即使在 WebRTC 标准化的范围之外,也没有很多专用的信令服务器。这是因为媒体服务器通常自带信令协议或机制。
只有在 WebRTC 初期出现的一些开发者无从下手的参与者,如 SIP.js、Simple-Peer、PeerJS 和 OpenEasyRTC 等,才能生存下来…
与此相反,现有的 “标准化 “协议,如带有 Jingle 的 XMPP 或新协议,如 Matrix,都是将媒体服务器与信令分离的替代方案。
此外,基于 ActivityPub 的去中心化服务器也是处理信令部分的一种新方法。
(1) Simple-Peer 似乎从 2022 年 2 月起就不再活跃, (2) Protoo 似乎从 2021 年 1 月起就不再活跃, (3) 至少有了 XEP-0166 Jingle
类六:其他 WebRTC 库
以下是我为一些用例找到的其他有趣库。
这里没有象限。只是一些很酷的库!
Libraries | Stars | Growth | Usage |
---|---|---|---|
WebRTC Samples | 13,1k | High | JS Samples demonstrating WebRTC JS API |
RecordRTC (1) | 6k | Medium | JS P2P recording |
adapter.js | 3,5k | Low | JS WebRTC Shime library |
WebTTY | 2,6k | Low | Go Share a terminal session |
GStreamer/webrtcsink/webrtcbin | 1,8k | Low | C pipeline-based multimedia framework |
aioquic | 1,3k | Medium | Quic/Python Quic and HTTP/3 protocol library |
WebRTC Camera | 1k | High | Home Assistant Home Assistant custom component for viewing almost any camera stream in real time using WebRTC |
WebRTC-CLI | 0,2k | Low | Go WebRTC command-line peer. |
PeerMetrics | 0,05k | Low | JS Collect stats for peer connections |
WebRTC Issue Detector | 0,04k | Low | JS Diagnostic tool and troubleshooter for WebRTC |
WebRTCMetrics | 0,02k | Low | JS Aggregate stats received from the WebRTC stack |
Stats Gatherer | 0,02k | Low | JS Collecting stats for webrtc connections |
由于我的开发工作,我主要关注Web库,但 WebRTC 在这里有很多用途。
(1) RecordRTC 似乎自 2022 年 4 月起就不活跃了
准备好使用 WebRTC 开源了吗?
如前所述,如果您需要在产品中添加实时交互和视频,WebRTC 开源生态系统和社区非常庞大,应该能满足您的需求。
但是,与其他最新技术一样,WebRTC 也需要一些时间才能达到成熟,因此有大量前景看好的老项目被大量使用,但现在却被其他更受欢迎的项目所抛弃。问题是,一些生产解决方案至今仍在使用它们,需要找到开发人员来重新修改/迁移代码库,使其获得开源支持。
我自己会定期更新这些 WebRTC 开源组件的列表,以便在 2024 年评选出未来的 100 强。
作者:Olivier Anguenot
实时互动网编译自:https://www.webrtc-developers.com/webrtc-top-100-open-source-projects-for-2023/
本文为原创稿件,版权归作者所有,如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/32793.html