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.业务类图


相关推荐
嵌入式小章4 小时前
基于STM32的实时时钟(RTC)教学
stm32·嵌入式硬件·实时音视频
wenchm4 天前
细说STM32单片机USART中断收发RTC实时时间并改善其鲁棒性的方法
stm32·单片机·实时音视频
Starry-sky(jing)6 天前
边缘计算【智能+安全检测】系列教程--agx orin解决RTC时间问题
linux·人工智能·目标检测·边缘计算·实时音视频
weichushun7 天前
STM32 RTC时间无法设置和读取
stm32·嵌入式硬件·实时音视频
LightningJie8 天前
STM32的hal库在实现延时函数(例如:Delay_ms 等)为什么用滴答定时(Systick)而不是定时器定时中断,也不是RTC?
stm32·单片机·实时音视频
Tracy97312 天前
空间音频技术
大数据·人工智能·音视频·语音识别·实时音视频
棱角~~13 天前
市面上热门的四款PDF转换器解析!!
人工智能·其他·pdf·音视频·实时音视频·学习方法
音视频牛哥13 天前
480p 720p 1080p 2k 4k 8k 12k分辨率视频分别占用多大带宽?
音视频·实时音视频·大牛直播sdk·8k编码·12k编码·rtmp 4k·rtmp 8k
棱角~~14 天前
百度翻译以及另外三款翻译工具推荐!!!
前端·经验分享·其他·音视频·实时音视频·1024程序员节