mediasoup基础概览

提示:本文为之前mediasoup基础介绍的优化

mediasoup基础概览


Mediasoup 是一个构建在现代 Web 技术之上的实时通信(RTC)解决方案,它是一个完全兼容 WebRTC 的高性能 Selective Forwarding Unit(SFU)服务器。Mediasoup 允许开发人员轻松地在应用程序中实现音视频通话、会议和直播等功能。

Mediasoup 的设计目标是提供高性能和可扩展性,同时保持足够的灵活性,以适应不同的应用场景和需求。它适用于需要实时音视频通信的 Web 应用程序,并且可以与现有的 Web 技术栈无缝集成。


以下是 Mediasoup 的一些关键特性和概念:

架构:

与现有的其他 SFU(选择性转发单元)实现不同,mediasoup 不是一个独立的服务器,而是一个无特定意见的 Node.js 模块,它可以被集成到更大的应用程序中:

const mediasoup = require("mediasoup");

因此,在内部,mediasoup 可以被拆分为两个独立的组件:

一个为 Node.js 提供现代 ECMAScript API 的 JavaScript 层,以及 一组处理媒体层(ICE、DTLS、RTP 等)的 C/C++ 子进程。 这两个组件通过进程间通信的方式相互交流。然而,从开发者的角度来看,应用程序只需要关心 JavaScript API 的集成。

Mediasop 由 TypeScript 语言实现的 master 端和基于 libuv 的 C++ 语言实现的 worker 模块组成。

2.特性:

优点

  1. ECMAScript 低层级 API:Mediasoup 提供了基于 ECMAScript(JavaScript)的 API,允许开发者以较低的抽象级别与 WebRTC 相关的功能进行交互,从而实现更精细的控制。
  2. 高性能:Mediasoup 底层使用 C++ 实现,运行在 libuv 之上,利用了现代 CPU 的多核能力,提供了高效的媒体数据转发能力。
  3. 低延迟:专为低延迟通信设计,适用于实时视频会议和交互式应用。
  4. 多流支持:Mediasoup 允许在单个 ICE(Interactive Connectivity Establishment)和 DTLS(Datagram Transport Layer Security)传输上发送和接收多个音视频流,这有助于减少建立连接的开销。
  5. IPv6 准备就绪:Mediasoup 支持 IPv6 协议,这使得它能够适应现代网络环境,并利用 IPv6 提供的更广阔的地址空间和更好的网络性能。
  6. ICE / DTLS / RTP / RTCP 支持:Mediasoup 支持通过 UDP 和 TCP 协议进行 ICE、DTLS、RTP 和 RTCP 的传输,这为建立安全且高效的 WebRTC 连接提供了基础。
  7. Simulcast 和 SVC 支持
    • Simulcast:Mediasoup 支持 Simulcast,允许发送者发送多个不同分辨率的视频流,接收者可以根据带宽和处理能力选择合适的流。
    • SVC(Scalable Video Coding):Mediasoup 还支持 SVC,这是一种视频编码技术,允许视频流在不同的层级上进行扩展,以适应不同的网络条件和解码能力。
  8. 拥塞控制:Mediasoup 实现了拥塞控制机制,可以动态调整传输速率,以优化网络条件并防止数据包丢失。
  9. 带宽估计:Mediasoup 包括发送端和接收端的带宽估计功能,使用空间/时间层分布算法来优化视频流的质量,根据可用带宽动态调整视频的分辨率和帧率。
  10. 强大的媒体工作进程:Mediasoup 的媒体工作进程是用 C++ 编写的,并在 libuv(一个跨平台的异步 I/O 库)之上运行,这使得 Mediasoup 能够提供高性能的媒体处理能力,特别是在处理大量并发连接时。

缺点

  1. 仅限于 WebRTC:Mediasoup 主要针对 WebRTC 进行了优化,不支持其他类型的媒体传输协议。
  2. 默认没有实现分布式集群实现。

3.mediasoup常见类介绍

js部分

AudioLevelObserver.js 检测声音大小
Channel.js 与mediasoup的c++部分进行通信
Consumer.js 消费者
EnhancedEventEmitter.js EventEmitter,事件发射器
Logger.js 日志
PipeTransport.js 每个进程Worker中连接Router之间的通信
PlainTransport.js 主要用于普通的非加密的RTP数据的传输
Producer.js 视频或者音频的生产者
Router.js 对应每个房间或者路由器
RtpObserver.js RTP观察者
Transport.js 一个基类,PipeTransport和PlainTransport这些都继承它实现。
WebRtcTransport.js webrtc传输
Worker.js 进程控制
errors.js 错误信息
index.js mediasoup库的索引
ortc.js 以对象的形式存储帧率码率等相关信息,和sdp对比
supportedRtpCapabilities.js 支持rtp的能力
utils.js 公共配置

c++

类名 解释 详细介绍
Worker 进程类 Mediasoup 的 worker 是实际进行媒体数据流转发的进程,可以根据 CPU 核心数启动相应数量的 worker。
Router 房间类 在 Mediasoup 中,Router 代表一个房间或者路由器,负责管理传输和媒体流。
Request 消息类 用于接收和发送数据(send)
Notifier 通知类 用于通知(Emit)
UnixStreamSocket 数据传输类 libuv的上层封装
Transport 通道类 Mediasoup 支持多种传输方式,包括 WebRtcTransport、PlainRtpTransport 和 PipeTransport,用于终端与 MediaSoup Router 之间的连接和媒体传输。
producer 生产者类 作为服务端的生产者,用于接收共享者发送的数据流。包含多个 RtpStreamRecv,以处理可能的丢包和重传。
consumer 消费者类 代表服务端的消费者,用于将数据发送给客户端。Consumer 是 PipeConsumer、SimulcastConsumer、SvcConsumer 和 SimpleConsumer 的基类。
RtpStreamSend 和 RtpStreamRecv stream类 处理 RTP 数据流的发送和接收。RtpStreamSend 用于 Consumer 将数据发送给客户端,而 RtpStreamRecv 用于 Producer 接收客户端发送的数据流。
SeqManager seq管理类 负责对传输的数据进行重新排序,确保数据包的顺序正确。
NackGenerator 丢包处理类 用于处理丢包情况,生成重传请求,以便发送端可以补充丢失的数据包。
PortManager 端口管理类 端口管理器,负责管理端口的使用,确保端口号没有被占用。

4.mediasoup类图


5.业务类图


相关推荐
野蛮的大西瓜2 天前
BigBlueButton视频会议 vs 华为云会议的详细对比
人工智能·自动化·音视频·实时音视频·信息与通信·视频编解码
野蛮的大西瓜2 天前
文心一言对接FreeSWITCH实现大模型呼叫中心
人工智能·机器人·自动化·音视频·实时音视频·文心一言·信息与通信
野蛮的大西瓜2 天前
BigBlueButton视频会议 vs 钉钉视频会议系统的详细对比
人工智能·自然语言处理·自动化·音视频·实时音视频·信息与通信·视频编解码
Whappy0012 天前
《第十二部分》1.STM32之RTC实时时钟介绍---BKP实验
stm32·嵌入式硬件·实时音视频
嵌入式小强工作室4 天前
如何在STM32中使用RTC定时器
stm32·单片机·实时音视频
野蛮的大西瓜4 天前
BigBlueButton视频会议 vs 华为视频会议系统的详细对比
人工智能·机器人·自动化·音视频·实时音视频·信息与通信·视频编解码
m0_370565226 天前
stm32 rtc 详解
stm32·单片机·实时音视频
菊风 Juphoon7 天前
物联网养宠,实时音视频为宠物行业“加码”
物联网·实时音视频·宠物
陌夏微秋7 天前
STM32单片机芯片与内部24 RTC——内部实时时钟 简介 特性 框图 原理 UNIX
stm32·单片机·嵌入式硬件·硬件工程·实时音视频·信息与通信·智能硬件
陌夏微秋7 天前
STM32单片机芯片与内部25 RTC BKP——数据手册 寄存器介绍
stm32·单片机·嵌入式硬件·实时音视频·信息与通信·智能硬件