概述
mediasoup是SFU模式的媒体服务器。SFU(Selective Forwarding Unit)模式是从房间中的每个参与者接收音频和视频流,并将其转发给其他人(终端发送一个并接收很多)。 与mixer或MCU(Multipoint Control Unit)相比,这种设计有更好的性能,更高的吞吐量和更少的延迟。 它具有高度的可扩展性,因为它不会转码或混合媒体,所以需要更少的资源。
由于终端分别获取其他参与者的媒体,所以他们可以有一个个性化的布局,并能选择要渲染的流显示。有关SFU体系结构的详细信息可以在RFC 7667“RTP拓扑”部分3.7中找到。
mediasoup 目标成为WebRTC SFU(Selective Forwarding Unit)。
在服务器端是一个Node.js模块。
在客户端是一个小小的SDK。
极简主义: 仅仅处理媒体层。
在客户端和服务器端使用流行的ECMAScript 6 API。
支持所有现有的WebRTC和ORTC浏览器。
不要求特定的信令协议。
Server side
与其他现有的SFU实现不同,mediasoup不是一个独立的服务器,而是一个可以集成到一个更大的应用程序中的Node.js模块:
const mediasoup = require("mediasoup");
因此,在内部,媒体可以分解为两个分离的组件:一个为Node.js提供现代ECMAScript 6 API的JavaScript层,
处理媒体层(ICE,DTLS,RTP等)的一组C/C ++子进程。
两个组件通过进程间通信相互通信。 但是,从开发人员的角度来看,应用程序应该只关心JavaScript API集成。
FeaturesECMAScript 6 API。
多个会议室与多个参与者。
多码流:通过ICE + DTLS传输多个音频/视频流。
IPv6准备就绪。
基于UDP和TCP之上的ICE / DTLS / RTP / RTCP协议。
用于选择所需层的RTP同播支持API。
通过REMB进行拥塞控制。
功能非常强大(基于libuv之上的子进程)。
Client side
mediasoup-client 是构建JavaScript客户端应用程序的SDK。 这是一个小型库,公开了强大的跨浏览器API,可让客户端应用程序加入媒体室并管理音频/视频流。
mediasoup-client支持当前所有的WebRTC和ORTC浏览器,包括Chrome,Firefox,Safari,Microsoft Edge和 衍生浏览器(例如Opera或任何基于Chromium的浏览器)。 在内部,mediasoup-client兼容实现了WebRTC(Plan-B或Unified-Plan)或ORTC API(如Microsoft Edge)以不同的方式处理每个浏览器。
FeaturesECMAScript 6 API。
在Chrome,Firefox,Safari,Microsoft Edge和衍生浏览器上运行。