缺点:对于接受端的下行带宽有考验,如SEO靠我果带宽不允许,可能导致服务质量不足
其中SFU是目前最优的一种多方通信架构方案,而且这种方案目前已经有比较流行的开源SEO靠我项目:Licode Janus-gateway Mediasoup Medooze
下面简单的对这4种方案进行分析:
Licode 既可以用作SFU 类型的流媒体服务器,也可以用作 SEO靠我MCU 类型的流媒体服务器。一般情况下,它都被用于SFU类型的流媒体服务器。
Licode 不仅仅是一个流媒体通信服务器,而且还是一个包括了媒体通信层、业务层、用户管理等功能的完整系统,并且该系统还支持分SEO靠我布式部署。
Licode 是由 C++ 和 Node.js 语言实现。其中,媒体通信部分由 C++ 语言实现,而信令控制、用户管理、房间管理用 Node.js 实现。
下面这张图是 Licode 的整体架SEO靠我构图:
如上图所示,从大的框架上来看,Licode框架被分为2部分:服务端和客户端
客户端被分为了3个部分:ClientAPP(信令通讯,比如房间操作、媒体协商...)、Eriza.SEO靠我js(对房间相应逻辑进行控制)、WebRTC(抓取音视频数据分享和展示)
通过上面的描述,可以知道 Licode 不仅仅是一个 SFU 流媒体服务器,它还包括SEO靠我了与流媒体相关的业务管理系统、信令系统、流媒体服务器以及客户端 SDK 等等,可以说它是一个比较完善的产品。
Licode缺点:
在 Linux 下目前只支持 Ubuntu 14.04 版本,在其他版本上SEO靠我很难编译通过。(现在不清楚,毕竟已经过去一段时间)Licode 不仅包括了 SFU,而且包括了 MCU,所以它的代码结构比较重,学习和掌握它要花不少的时间。Licode 的性能一般, 如果你把流媒体服SEO靠我务器的性能排在第一位的话,那么 Licode 就不是特别理想的 SFU 流媒体服务器了。Janus 是一个非常有名的 WebRTC 流媒体服务器,它是以 Linux 风格编SEO靠我写的服务程序,采用 C 语言实现,支持 Linux/MacOS 下编译、部署,但不支持 Windows 环境。
它是一个开源项目,其源码的编译、安装非常简单
流程如Medooze架SEO靠我构图流程一致!!(后面)
1.信令接口,Janus 支持的信令SEO靠我协议比较多,如 HTTP、WebSocket、RabbitMQ 等。这些信令协议使得 Janus 具有非常好的接入性。因为很多公司喜欢各种不同的协议,如有的喜欢 websocket,有的喜欢http,SEO靠我proto等。因此 Janus 在信令接入方面具有很大的优势。
2.Janus Plugin,Janus 的业务管理是按照 Plugin 的方式管理的,因此你可以在Janus中根据自己的需要实现自己的业SEO靠我务插件。实际上,对于一般性的需求 Janus 已经相关的插件。如:
SIP:用于与传统电话设备对接,这个插件使得 Janus 成了 SIP 用户的代理,从而容许 WebRTC 终端在 SIP 服务器(如SEO靠我 Asterisk)上注册,并向 SIP 服务器发送或接收音视频流。TextRoom:该插件使用 DataChannel 实现了一个文本聊天室应用。Streaming:用于广播,也就是我们通常所说的一SEO靠我人共享,多人观看的直播模式;它容许 WebRTC 终端观看 / 收听由其余工具生成的预先录制的文件或媒体。VideoRoom:它实现了视频会议的 SFU 服务,实际就是一个音 / 视频路由器,用于多人SEO靠我音视频互动,像音视频会议,在线教育都可以通过该插件来实现。VideoCall:这是一个简单的视频呼叫的应用,容许两个 WebRTC 终端相互通讯,用于 1:1 的音视频通信。它与 WebRTC 官网的SEO靠我例子类似(https://apprtc.appspot.com),不一样点是这个插件要通过服务端进行音视频流中转,而 WebRTC 官网的例子走的是 P2P 直连。RecordPlay:该插件有两个功SEO靠我能,一是将发送给 WebRTC 的数据录制下来,二是能够经过 WebRTC 进行回放。3.Janus Core是Janus的核心,其作用是处理流的转发,各种协议的接入。以浏览器为例,要想让浏览器接入到SEO靠我 WebRTC 流媒体服务器上,那流媒体服务器必须要支持 STUN、DTLS、SRTP、ICE 等协议。而 Janus Core 就是专门做这事儿的。
Janus 总体架构采用了插件SEO靠我的方案,这种架构方案很是优秀,用户能够根据本身的须要很是方便地在上面编写本身的应用程序。并且它目前支持的功能很是多,好比支持 SIP、 RTSP、音视频文件播放、录制等等,因此在与其余系统的融合性上有SEO靠我很是大的优点。另外,它底层的代码是由 C 语言编写的,性能也很是强劲。Janus 的开发、部署手册也很是完善,所以它是一个很是棒的开源项目。因此,它的架构设计比较复杂,对于初学者来讲难度较大。
Medooze 的整体架构与 Mediasoup 类似,不过它的信令处理、业务管理以及媒体数据的转发功能都是放在 Nodejs下进行统一管理的。实际上,这样的管理方式也不会对性能造成什SEO靠我么影响,因为重的媒体流的转发工作仍然是使用的 C++ 在 Nodejs 底层实现的。
Medooze 是一款综合流媒体服务器,它不仅支持 WebRTC 协议栈,还支持很多其他协议,如 RTP、RTMP SEO靠我等。其源码地址为:https://github.com/medooze/media-server 。
多客户端流程一致!!!
MSEO靠我edooze 的业务功能要比 Mediasoup 强大,像服务端录制、推流这些 Mediasoup 没有的功能它都支持。但它性能没有 Mediasoup 做的极致,在Medooze的底层使用的pollSEO靠我来处理I/O事件,poll与epoll性能相差距大。除此之外,Medooze的业务逻辑也没有Mediasoup简洁;另外与 Janus 相比,它的业务管理不如 Janus 灵活,Janus 的插件管理SEO靠我方式显然要优于 Medooze 和 mediasoup。
但总的来说,Medooze还是一款非常不错的 WebRTC 流媒体服务器。虽然有一些小的暇疵,但还是非常不错的一款流媒体服务器。
Mediasoup 是推出时间不长的 WebRTC 流媒体服务器开源库,其地址为:https://github.com/versatica/mediasoup/ 。
通过该图我们可以知道 Mediasoup 流媒体服务器是由 Nodejs 和 Mediasoup(C++) 两部分组成。
Nodejs,负责 MediasoSEO靠我up 的信令接收与业务管理。如创建/消毁房间,创建/关闭生产者,创建/关闭消费者等。Mediasoup(C++),这是一个单独的程序,但该程序无法直接启动。因为它在内部会判断是否是 Nodejs 将它SEO靠我启动起来了。只有在Nodejs 的 Mediasoup 管理模块加载之后,再将 Mediasoup(C++)启动起来,这样它才能正常工作。Nodejs 与 Mediasoup之间通过管道进行通信。在众SEO靠我多的 WebRTC 流媒体服务器中,Mediasoup 可以说是性能最优秀的WebRTC流媒体服务器。它使用 C++ 作为开发语言,底层使用 libuv 处理 I/O 事件。
Mediasoup中的每SEO靠我个进程称为一个 Worker, 你也可以把它理解为一个节点,在每个 Worker 中可以有多个 Router。
对于 Router,你站在不同的解度可以有不同的理解。如果你占在应用层的角度,你可以把它理SEO靠我解为一个房间;如果你站在数据流转的角度,可以把它理解为一个路由器,数据通过 路由器 转发给目标用户。
大的绿色箭头下面,有灰色的Transport字体,分为三种类型,即 WebRtcTransport、SEO靠我PlainRtpTransport 和 PipeTransport。
WebRtcTransport 用于与 WebRTC 类型的客户端进行链接,如浏览器。PlainRtpTransport 用于与传统SEO靠我的 RTP 类型的客户端链接,经过该 Transport 能够播放多媒体文件、FFmpeg 的推流等。PipeTransport 用于 Router 之间的链接,也就是一个房间中的音视频流经过 PipSEO靠我eTransport 传到另外一个房间。在每一个 Transport (每一个用户)中能够包括多个 Producer 和 Consumer。
Producer 表示媒体流的共享者,它又分为两种类型,即音SEO靠我频的共享者和视频的共享者。Consumer 表示媒体流的消费者,它也分为两种类型,即音频的消费者和视频的消费者。Mediasoup 的实现逻辑很是清晰,它不关心上层应用该如何作,只关心底层数据的传输,SEO靠我并将它作到极致。
1.Meooze、Mediasoup、Licode 这三个流媒体服务器的媒体通讯部分都是由 C++ 实现的,而控制逻辑是经过 Node.jsSEO靠我 实现,所以若是你是 C++ 开发人员,且有 JavaScript 技术背景,那么你就应该在这三种流媒体服务器之间选择,由于这样更容易入门。
2.而 Janus-gateway 是彻底经过 C 语言实现SEO靠我的,服务部署是传统的 Linux 风格,所以若是你是 Linux/C 开发者,则应该选择 Janus 做为你的流媒体服务器。1.像 Licode 是一个完整的系统,支持分布式集群部署,因此系SEO靠我统相对复杂,学习周期要长一些。它能够直接布署在生产环境,可是二次开发的灵活性不够。
2.Janus-gateway 是一个独立的服务,支持的信令协议很丰富,并且支持插件开发,易扩展,对于 Linux/CSEO靠我 背景的开发者是很不错的选择。
3.Medooze 和 Mediasoup 都是流媒体服务器库,对于须要将流媒体服务器集成到本身产品中的开发者来讲,应该选择它们。
1.Licode、MeoozeSEO靠我、Mediasoup、Janus-gateway 单台服务均可以支持 500 方参会人,因此它们的性能都仍是不错的。
2.相对来讲,Licode 的性能与其余流媒体服务器相比要低一些;
3.MedoozeSEO靠我 因为没有使用 epoll 来处理异步 IO 事件,因此性能也受到一些影响。
不过总的来讲,它们在 500 方的容量下,视频质量均可以获得很好的保证,延迟在 100ms 左右。
网站备案号:浙ICP备17034767号-2