使用演示项目试用 Mediasoup 该演示项目展示了使用 mediasoup、 mediasoup-client 和 socket.io 的实时视频通信平台的简单实现。 要引入 Mediasoup 组件来管理媒体流、路由和转码,您需要在服务器代码中初始化和配置 Mediasoup。 " for mediasoup-related socket events const peers = io.of("/mediasoup"); 初始化 Mediasoup 工作器和Router 首先初始化核心变量 let worker: mediasoup.types.Worker<mediasoup.types.AppData>; let router: mediasoup.types.Router<mediasoup.types.AppData producer: mediasoup.types.Producer<mediasoup.types.AppData> | undefined; let consumer: mediasoup.types.Consumer
其中对最近比较流行的 mediasoup WebRTC 服务器也进行了调研。 在调研过程中,发现很少有人完整在 Windows 上运行成功 mediasoup-demo 程序,甚至部分程序员认为在 Windows 中不能够成功运行 mediasoup-demo,因此将在 Windows 运行成功 mediasoup-demo 的经验分享给大家。 clone https://github.com/versatica/mediasoup-demo.git $ cd mediasoup-demo $ git checkout v3 目前此项目应该不再更新 修改第 22 行,为 “mediasoup”: “^3.6.16”, 如果不修改此行,则会从 github 中下载 mediasoup-v3 版本的依赖,否则会超级慢。
Mediasoup ? Mediasoup 整体结构 上图是Mediasoup整体架构图,通过该图我们可以知道 Mediasoup 流媒体服务器是由 Nodejs 和 Mediasoup(C++) 两部分组成。 只有在Nodejs 的 Mediasoup 管理模块加载之后,再将 Mediasoup(C++)启动起来,这样它才能正常工作。 对性能要求高的是媒体数据流的转发工作,而这部分工作是由 Mediasoup(C++)部分实现的。Nodejs 与 Mediasoup之间通过管道进行通信。 Medooze 的业务功能要比 Mediasoup 强大,像服务端录制、推流这些 Mediasoup 没有的功能它都支持。
正文 WebRTC搭配Mediasoup支持SVC能力时,首先需要WebRTC终端通过SDP信息协商交换彼此的SVC能力,协商决定使用SVC分层编码视频后,就开始通知编码器生成具备分层信息的视频编码码流 一、推拉流整体示意图 WebRTC终端之间进行音视频实时通讯肯定少不了流媒体服务器的参与,本文以Mediasoup作为流媒体服务器为例进行介绍。 现在先来看一个最简单的推拉流模型的示意图,其中包含推流端、拉流端、ms(Mediasoup)服务器,具体如下图所示: 上图重点体现了流媒体服务器上的部分逻辑内容,推流端把音视频数据推到Mediasoup
业内口碑不错的Mediasoup,很明显已经走在停滞的边缘,再过几年估计就和NginxRTMP一样停止更新了。当然它有值得学习的地方。 曾经直播大火时知名的开源服务器,目前Star也挺可观的。 •mediasoup[11], Cutting Edge WebRTC Video Conferencing. 一个CuttingEdge的WebRTC会议服务器。 为何Mediasoup和Licode代码看起来都比Janus牛逼,但为何就是干不过呢: •Mediasoup的Cutting Edge到底是啥呢? srs: https://github.com/ossrs/srs [10] janus-gateway: https://github.com/meetecho/janus-gateway [11] mediasoup : https://github.com/versatica/mediasoup [12] licode: https://github.com/lynckia/licode [13] FFmpeg:
当前一些开源SFU的现状,例如Janus和MediaSoup,其服务端都会开UDP的操作范围,即服务端用不同的端口服务不同的客户端的媒体连接。 同时在Janus中,信令和媒体是耦合在一起的;而在MediaSoup中,官方提供了nodejs库,其本身只是一个媒体层的库。 MediaSoup虽然也是多端口方案,但是并未使用Libnice库,因此可以直接在底层实现整套单端口方案,并不需要Porxy的存在。 Janus实现了基于HTTP或WebSocket的信令,MediaSoup本身是nodejs的库,不包含信令部分,但是其官方的Demo也实现了HTTP或WebSocket的信令。 目前开源的Janus和MediaSoup都不具备完备的级联能力,都需要进行相应的改造。 级联主要涉及两个问题:其一,网络拓扑的问题,其二是级联协议的问题。
最近被mediasoup 和 pion抢了一些份额 关注量:6200+ https://github.com/meetecho/janus-gateway mediasoap 开源媒体服务器,提供node 核心开发者在全职为Around开发能力 关注量:4200+ GitHub - versatica/mediasoup: Cutting Edge WebRTC Video Conferencing medooze-server
下面是商业方面: • Janus、Jitsi、mediasoup和Pion 我曾在《2022 WebRTC发展趋势分析》中详细介绍过这些项目,相关内容可以参见下图。 • mediasoup mediasoup由在Around[27]工作的两名开发人员维护,这也说明它没有付费支持官方选项。 同样,也无法使用定制化开发。 mediasoup的生态意味着你也可以找到它的开发人群。 • Pion 我们在上文介绍WebRTC客户端时已经讨论了Pion。 假设媒体服务器也是如此。 • Kurento的失败 Kurento媒体服务器已经死了,连它背后的那群开发者都去开发OpenVidu(下文会介绍)了,并让OpenVidu在mediasoup之上运行。 千万别碰它。 他们甚至逐渐采用mediasoup作为使用的媒体服务器[29],而将Kurento置于一边。
被测系统 我们测试了以下SFU: Janus Jitsi Kurento mediasoup Medooze 为了确保每个SFU都显示出最佳结果,我们联系了每个项目背后的团队。 0.4.3)及其视频室插件, Medooze(版本0.32.0) SFU应用程序, Kurento(来自OpenVidu Docker容器,Kurento Media Server版本6.7.0), mediasoup Janus和mediasoup似乎比Medooze更好。它似乎与更好的CPU优化有关,因为拐点与各个CPU的饱和度相关。 我们还添加了mediasoup结果(绿色)。Medooze和Kurento / OpenVidu结果在两个图中都是相同的,因为第二次没有更好的结果。 RTT或延迟,作为负载的函数(对数标度)。 我们还添加了mediasoup结果(绿色)。Medooze和Kurento / OpenVidu结果来自同一数据集。
2.2. mediasoup官网地址:https://mediasoup.org/架构:SFU,基于C++的webrtc会议框架协议:webrtc,不支持多协议录存:没有录像功能,录存用ffmpeg,视频会议录存很麻烦
,服务器的压力更小(纯转发,无转码合流),灵活性更好(可选择性开关任意一路数据的上下行等),受到更广泛的欢迎和应用,常见的开源 SFU 服务器有:Licode,Kurento,Janus,Jitsi,Mediasoup 3.6 Mediasoup https://github.com/versatica/mediasoup 由于其多功能性,性能和可伸缩性,mediasoup成为构建多方视频会议和实时流应用程序的理想选择 除了创建另一个自带服务器之外,mediasoup是一个Node.js模块,可以将其集成到更大的应用程序中。mediasoup提供了一个低级API,该API支持您的应用程序使用不同的用例。 mediasoup带有mediasoup-client(JavaScript库)和libmediasoupclient(C ++库),用于构建使用统一API在任何浏览器或设备中运行的应用程序。 设计目标 mediasoup及其客户端库旨在实现以下目标: 成为SFU(选择性转发单元)。 支持WebRTC和普通RTP输入和输出。 在服务器端成为Node.js模块。
维护该项目的团队后来开发了OpenVidu并开始了从Kurento到mediasoup的迁移。 多年来Janus一直表现强劲,但今天在新的项目中却越来越少看到它。 mediasoup也是一个很棒的选择。最近几年,使用mediasoup的用户数量增长可观。我听到的大部分反馈都很正面。 Pion很有趣。
Kurento仍然没缓过来; Janus表现不错,跟一年前一样; Jitsi 在组会议功能中仍扮演重要角色; mediasoup是个不错的选项,其创始人和主要开发人员都曾在Around工作,随后通过收购一同加入了 不出所料,Janus、Jitsi、mediasoup和Pion都保持住了稳定的创始团队,这些团队和个人继续全身心倾注于这些项目,所以发展态势继续向好。 mediasoup – mediasoup的创始人习惯于“按部就班”。这种不紧不慢的节奏让mediasoup在Around和Miro、乃至未来的其他收购方之间不断易手。 这会在2023年对mediasoup项目产生显著影响吗?可能不会,但整体经济衰退也许会影响项目的未来命运。
Q:和Janus、Mediasoup差别是什么? 杨成立:SRS 定位是视频服务器,直播和 RTC 两个互联网场景。 Janus 和Mediasoup 是 RTC 的 SFU,不支持直播。 Q:怎么做的性能分析,能否公开?可讲一下出传输的方案与优化吗?
SIP Proxy https://github.com/cgrates/cgrates Billing https://janus.conf.meetecho.com/ Janus https://mediasoup.org
运维复杂度需要专业团队服务商承担长期成本随规模降低随规模增加推荐技术栈组合基础通信:WebRTC + Coturn穿透服务器信令服务:Socket.io + Node.js移动端:Android(JNI)/iOS(WebRTC.framework)后台管理:Kurento或Mediasoup
一些开源的WebRTC框架 licode http://chotis2.dit.upm.es/# mediasoup https://mediasoup.org/ jitsi https://jitsi.org
实战 使用JRTPLIB发送/接收RTP数据包 使用RTP包荷载H264码流 RTP扩展头部Audio Level的应用(mediasoup显示当前通话Speaker) 发布者:全栈程序员栈长,转载请注明出处
如果它是单线程的,那逻辑就比较简单了,像mediasoup就是单进程多实例的模型;如果是多线程的,那它的线程是如何分配的?每个线程的作用是什么?
Mediasoup B. janus C. medooze D. OWT 在WebRTC流媒体服务器中SFU与MCU的区别是什么 A. SFU比MCU可以负载更多的用户量 B.