mediasoup基础概览

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

mediasoup基础概览

    • 架构:
    • 2.特性:
      • 优点
      • 缺点
    • 3.mediasoup常见类介绍
      • js部分
      • c++
    • 4.mediasoup类图
    • 5.业务类图


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 模块组成。
微信图片_20240602100208.png

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.jsEventEmitter,事件发射器
Logger.js日志
PipeTransport.js每个进程Worker中连接Router之间的通信
PlainTransport.js主要用于普通的非加密的RTP数据的传输
Producer.js视频或者音频的生产者
Router.js对应每个房间或者路由器
RtpObserver.jsRTP观察者
Transport.js一个基类,PipeTransport和PlainTransport这些都继承它实现。
WebRtcTransport.jswebrtc传输
Worker.js进程控制
errors.js错误信息
index.jsmediasoup库的索引
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 和 RtpStreamRecvstream类处理 RTP 数据流的发送和接收。RtpStreamSend 用于 Consumer 将数据发送给客户端,而 RtpStreamRecv 用于 Producer 接收客户端发送的数据流。
SeqManagerseq管理类负责对传输的数据进行重新排序,确保数据包的顺序正确。
NackGenerator丢包处理类用于处理丢包情况,生成重传请求,以便发送端可以补充丢失的数据包。
PortManager端口管理类端口管理器,负责管理端口的使用,确保端口号没有被占用。

4.mediasoup类图

20200224113930707.png


5.业务类图

20210116195335968.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/671119.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac硬件设备系统环境的升级/更新 macOS

Mac硬件设备上进行系统环境的升级/更新macOS 1.大版本(升级)判断(比如:我买的这台电脑设备最高支持Monterey) 点击进入对应的大版本描述说明页查看相关的兼容性描述,根据描述确定当前的电脑设备最高可采用哪个大版本系统(Sonoma/Ventura/Monterey/Big Su…

vue中使用WebSocket心跳机制与Linux中的心跳机制

WebSocket心跳机制 一、WebSocket简介 WebSocket是HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。 二、WebSocket事件与方法 …

为什么总是卡在验证真人这里无法通过验证?

最近总是在浏览某些网站的时候卡在这个“确认你是真人”的验证页面,无法通过真人验证,这是怎么回事儿?如何解决呢? 首先,出现这个“确认您是真人”的验证一般都是这个网站使用了 CloudFlare 的安全防护 WAF 规则才会出…

【每日刷题】Day54

【每日刷题】Day54 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 575. 分糖果 - 力扣(LeetCode) 2. 147. 对链表进行插入排序 - 力扣&#xf…

Ubuntu 24.04 LTS 安装Docker

1 更新软件包索引: sudo apt-get update 2 安装必要的软件包,以允许apt通过HTTPS使用仓库: sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 3 添加Docker的官方GPG密钥: curl -fs…

【WEEK14】 【DAY5】Swagger Part 3【English Version】

2024.5.31 Friday Following up on【WEEK14】 【DAY4】Swagger Part 2【English Version】 Contents 16.6. Configure API Groups16.6.1. Modify SwaggerConfig.java16.6.2. Restart 16.7. Entity Configuration16.7.1. Create a new pojo folder16.7.2. Modify HelloControlle…

RDD与Java实战:学生列表,先按性别降序,再按年龄降序排列

文章目录 Scala RDD 实现Java 实现实战总结 在本实战任务中,我们的目标是对学生列表进行排序,排序规则是先按性别降序排列,再按年龄降序排列。我们提供了两种实现方式:使用Scala的RDD(弹性分布式数据集)和…

牛客网刷题 | BC109 正斜线形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

今日好料推荐(这就是会计)

今日好料推荐(这就是会计) 参考资料在文末获取,关注我,获取优质资源。 这就是会计:资本市场的会计逻辑 是一本由中国会计专家编写的书籍,旨在深入探讨会计在资本市场中的核心作用及其运作逻辑。作为一本…

HTTPS加密

一.加密是什么 加密就是把明文(要传输的信息)进行一系列的变换,生成密文. 有加密就有解密,解密就是把密文进行一系列的变换,生成明文. 在这个加密和解密过程中,往往需要一个或多个中间数据,辅助进行这个过程,这样的数据称为密钥. 加密解密到如今已经发展成了一个独立的学科 : 密…

AtCoder Beginner Contest 356 A~E(F更新中...)

A.Subsegment Reverse 题意 给出三个正整数 N , L , R N, L, R N,L,R。 对于一个序列 A ( 1 , 2 , … , N ) A (1, 2, \ldots, N) A(1,2,…,N)&#xff0c;请你输出翻转了 L ∼ R L \sim R L∼R之间数字后得到的序列。 分析 使用循环进行翻转即可。 代码 #include <…

学工管理系统有什么作用

学生信息办理系统是针对学校学生处的很多作业处理作业而开发的办理软件&#xff0c;首要用于学校学生信息办理&#xff0c;整体使命是完成学生信息联系的体系化、科学化、标准化和自动化&#xff0c;其首要使命是用手机和计算机对学生各种信息进行日常办理&#xff0c;如查询、…

Ubuntu 20.04 LTS配置JDK、Git

一、配置JDK 1.1 更新系统 执行以下命令 sudo apt update 出现以下界面即为安装成功 1.2 安装openjdk-11-jdk Ubuntu20.04中没有默认JDK&#xff0c;执行以下指令安装&#xff0c;默认会自动配置一些必要环境变量 sudo apt install openjdk-11-jdk 1.3 配置环境变量&…

CMake编译安装、生成可执行程序、生成静态动态库以及静态动态库的链接

1 CMake介绍 CMake是一个开源的、跨平台的构建系统&#xff0c;用于管理软件从源代码到可执行文件的整个构建过程。它最初由Kitware公司为ITK&#xff08;Insight Segmentation and Registration Toolkit&#xff09;和VTK&#xff08;Visualization Toolkit&#xff09;等开源…

TimeDao-一篇文章了解清楚Subspace项目

1 项目简介 什么是Subspace网络&#xff1f; Subspace是为下一波加密创建者构建的第四代区块链。旨在实现web3规模扩容。 Subspace允许开发者以互联网规模运行 Web3 应用。它提供了一个简单的接口&#xff0c;用于快速部署按需求自动扩展的多链去中心化应用。Subspace由一个…

Python06 条件判断语句

Python 条件判断语句 Python 条件判断语句格式1if 条件 :else:格式2if 条件 :elif条件 :else:三目: second_max num1 if 条件语句 else num2# 快捷键: tab 整体向右移动一个水平制表符&#xff0c;shift tab 整体向左移动一个水平制表符 num1 10 num2 20 if num2 > num…

每日5题Day15 - LeetCode 71 - 75

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;71. 简化路径 - 力扣&#xff08;LeetCode&#xff09; class Solution {public String simplifyPath(String path) {Deque<String> stack new LinkedList…

Java17 --- SpringCloud之seate

目录 一、创建seata需要的mysql数据库表 二、修改seata的配置文件 三、启动nacos及seata 四、创建需要的数据库及表 一、创建seata需要的mysql数据库表 CREATE DATABASE seata;CREATE TABLE IF NOT EXISTS global_table(xid VARCHAR(128) NOT NULL,…

电影APP需求规格说明书示范

电影APP需求规格说明书示范 目录结构参考1 引言1.1编写目的1.2背景1.3项目目标1.4 概述 2 整体说明2.1 用例模型2.2 产品功能2.3 用户特点2.4 需求分配 3 具体需求3.1用例描述3.2用例细化 4 支持信息 目录结构参考 计算机软件需求规格说明规范 标准号&#xff1a;GB/T 9385-20…

Jmeter参数化

Jmeter参数化 本质&#xff1a;使用参数的方式来替代脚本中的固定的测试数据 实现方式&#xff1a; 定义变量&#xff08;最基础&#xff09; 文件定义的方式&#xff08;所有测试数据都是固定的情况下&#xff09; 数据库的方式&#xff08;灵活&#xff09; 函数方式&am…