mediasoup基础概览

news2024/11/20 8:48:53

提示:本文为之前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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Day13:vw 和 vh 基本使用

目标:使用 vw 和 less 完成移动端的布局。 一、vw 适配方案 1、vw 和 vh 基本使用 vw 和 vh 是相对单位,相对视口尺寸计算结果。 vw:viewport width(1vw 1/100视口宽度 )vh:lviewport height ( 1vh 1/…

企业为么要建设数据可视化大屏?简要的告诉您答案

1、在数字时代的浪潮中,数据已经成为企业决策和操作的重要基础。因此,“数据可视化大屏方案”逐渐成为业界关注的焦点。 2、数据可视化大屏通过将复杂的数据集合以直观的形式展现出来,帮助决策者快速把握信息,让决策者做出更加明…

Python04:python代码设置作者/创建时间/文件名称

我们新建一个py文件时,如果希望文件开头有固定的内容,怎么设置呢? 比如代码作者、文件创建时间等。。。 1、点击左上角【Python】–>【Settings】设置 2、在弹出的新窗口找到【File and Code Templates】–>【Python Script】–>在右…

【javaEE初阶】

🌈🌈🌈关于java ⚡⚡⚡java的由来 我们这篇文章主要是来介绍javaEE,一般称为java企业版,实际上java的历史可以追溯到上个世纪90年代,当时主要的语言主流的还是C语言和C,但是在那个时期嵌入式初…

Unity中帧动画素材的切割设置

有几个问题,美术在给我们帧动画的时候,一般都是给一个比较大的图,然后进行切割成多个sprite,导入到animation中 一般来说,进行那个autoSlide,自动切割就可以了 这个自动切割的图片会沿着有像素的最小包围…

运动会信息管理系统(Springboot+MySQL)

本课题旨在实现对运动会信息的全面管理,提供用户友好的界面和高效的操作体验。系统的基础功能包括运动员报名比赛、比赛成绩查询、资讯留言等。为了确保系统的高扩展性和稳定性,选用主流的开发技术,实现规范的项目结构和高效的性能。 技术选型…

Linux基础 (十四):socket网络编程

我们用户是处在应用层的,根据不同的场景和业务需求,传输层就要为我们应用层提供不同的传输协议,常见的就是TCP协议和UDP协议,二者各自有不同的特点,网络中的数据的传输其实就是两个进程间的通信,两个进程在…

VS2022,DLL1调用lib,lib调用DLL2

DLL1调用lib,lib调用DLL2 问题1:为什么在dll1中需要引入dll2的.lib文件 当你有一个工程(dll1)调用静态库(lib),而静态库(lib)又调用另一个DLL(dll2&#xf…

3D模型贴了白膜渲染漆黑一片---模大狮模型网

在3D建模与渲染的世界里,白膜通常作为基础的材质贴图,用于呈现模型的基本形状和轮廓。然而,当我们在3D Max软件中为模型贴上白膜后,却发现渲染结果漆黑一片,这无疑是一个令人困扰的问题。 一、材质与贴图问题 首先&am…

高通开发系列 - 借助libhybris库实现Linux系统中使用Andorid库(2)

By: fulinux E-mail: fulinuxsina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 参考上一篇文章:高通开发系列 - 借助libhybris库实现Linux系统中使用And…

报名倒计时 2 天!龙蜥社区系统安全 Meetup 演讲亮点一览

各位开发者们: 龙蜥社区“走进系列”第 10 期《龙蜥社区系统安全 MeetUp》,由浪潮信息联合龙蜥社区主办,将于 2024 年 6 月 14 日(周五)在北京召开!现场活动报名截止时间 6 月 7 日,限定 80 名…

Windows下SVN文件损坏,启动服务报错1067

之前碰到过一次,忘记最后怎么解决的了,只记得大概原理和原因,以及解决办法。 1067错误码,很多地方都会碰到,mysql也会有,看来应该是windows系统的错误码。跟具体程序无关。所以直接百度“SVN”、“1067”…

Vue3中的常见组件通信之mitt

Vue3中的常见组件通信之mitt 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $refs…

重要经济数据对行情的影响有多大?

金融市场上的消息非常多,可以来自不同国家、不同大型企业,也可以由不同机构统计公布,甚至是各国政府或中央银行的发表。在宏观经济层面上,所有政经消息都属于金融市场的风险事件,大多能引起市场波动,因此投…

STM32作业实现(一)串口通信

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…

小米SU7智能座舱介绍,果然有亮点!

2024 年,小米 SU7 横空出世,从开始的怀疑到发布后仅 24h 就达到了 8W 台的订单量,火到出圈的具象化。智能手机厂家造车,之前的华为做了榜样,小米作为汽车制造中又一条鲶鱼,能否给智能汽车市场带来新的契机? 小米造车可谓是各方位进行全新打造,包括座舱、底盘、智驾、车…

word自带公式编辑器技巧

1.实现多行公式换行且对齐 1.1 准备阶段(默认Unicode模式) 进入公式编辑模式,输入\eqarray,紧接着按下空格键输入空格,如下 1.2 实现换行和对齐 将要编辑的公式输入到括号内 &:实现位置对齐 &…

IP协议1.0

基本概念: • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…

循迹模块之循迹小车

1.TCRT5000传感器 TCRT5000传感器的红外发射二极管 不断发射红外线 1.1 当发射出的红外线没有被反射回来或被反射回来但强度不够大时, 红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态 1.2 当被检测物体…

罗德与施瓦茨RS SMA100A 9KHZ-3GHZ或6GHZ信号发生器

R&S SMA100A 提供信号质量、速度和灵活性。R&S SMA100A 是一款高级模拟发生器,因其出色的特性而树立了标准。 它结合了卓越的信号质量和极高的设置速度。无论是在开发、生产、服务还是维护方面,R&SSMA100A 都能出色地完成任务。 罗德与施瓦茨…