【音视频】Mesh、Mcu、SFU三种框架的总结

目录

三种网络场景介绍 

【Mesh】

【MCU】(MultiPoint Control Unit)

【SFU】(Selective Forwarding Unit)

三种网络架构的优缺点

Mesh架构

MCU架构(MultiPoint Control Unit)

SFU架构(Selective Forwarding Unit)

总结

参考文章


三种网络场景介绍 

【Mesh】

Mesh架构,需要所有参与连接的peer建立与所有其他peer的媒体连接。
该架构需要n-1个上下行,以此带来的带宽消耗(流量)、编/解码消耗(手机性能)成线性增长。
该架构只能适用3-4个人的小型会议场景。

【MCU】(MultiPoint Control Unit)

所有本房间的peer将本地媒体流推到远程媒体服务器,由媒体服务器进行混流,然后再推到所有连接的peer端。
该架构的优点就是只需要1路上下行,随着peer人数不断增加,依然不会对用户造成带宽、手机性能影响。
该架构将压力转嫁到服务端,由专用媒体服务器来完成混流,转推等功能。

【SFU】(Selective Forwarding Unit)

相对于MCU来说SFU只做转发,媒体服务器压力有限。与mesh架构相比,只需要n-1个下行,1个上行。
在大规模的场合该架构具有伸缩性。
 

三种网络架构的优缺点

 

Mesh架构

Mesh架构流量或带宽要求比较大,Mesh架构是利用Webrtc对等连接,在参与会议的各方之间开辟UDP通道,也就是两两进行P2P连接,把媒体流发给参与会议的各方,同时从参与会议的其它方获取媒体流,如上图四个参与方,总共8个连接,如果每个通道占用1M带宽,那每个端需要把自己的流发给其它三个端,也就是上行是3M带宽,同时从其它3个端获取流,也就是下行3M带宽,这样每个端上下行总共6M带宽;
Mesh架构对端的能力要求也是比较高,毕竟参与会议的各方的媒体流的编解码都是在端上面来处理的,图上面的4个参与会议方,那每个端的处理量就是4;结合上面可以看出Mesh一个端能承受的同时开视频的人员更少
Mesh架构不利于媒体的集中处理;例如媒体的录制,你如果不觉得带宽或者流量是问题,再从端上传一份媒体到存储服务器那又另当别论;又或者小哥哥小姐姐直播了一些不该直播的无法进行识别或处理了;再者集成我大讯飞的翻译咋办?不能没有我大讯飞的翻译啊,当然端上做也是可以的,但是毕竟端上算力是有限的;
但是Mesh实现起来技术难度是最小的,实现起来最简单;Mesh架构对服务器资源占用是最小的,只需要一个ICE服务器用来实现P2P穿越就行了,Mesh架构是真正的去中心化,对服务器资源占用是最小的,还有可以充分的利用了端上的算力,边缘计算的时代已经来了,节省不少成本;

MCU架构(MultiPoint Control Unit)

MCU架构对服务器端压力比较大,MCU架构需要一个中心化的MCU服务器,编码、转码、解码、混合都在服务器端做;
如上图MCU架构下的参会的4个端把自己的媒体流上缴到MCU服务器,然后MCU服务器对4个媒体流解码后进行合并,4个流合并成一个媒体流,再发给4个参会人员;因此服务器的压力特别大;所以单台服务器能承受的参会人员特别少,当然一些财大气粗的企业可以加服务器,加高级的GPU
MCU端上各种控制更加复杂 ,现在我和漂亮小姐姐聊天,小姐姐是我日思夜想的,我现在想把她的画面调大,这个实现起来就很麻烦了,因为下发的媒体流是合并的,也就是一个视频流;当然不是不可实现,通过信令服务器下发一个重新合屏的信令我们还是可以看到清晰的小姐姐的画面的;只是相对来讲实现更麻烦;
又比如我希望参会的小姐姐们看到群里最靓的我,那我对我自己上滤镜美白那可就麻烦了
MCU架构占用带宽最小,从前面的描述和从上图中我们可以看到4个参会人员每个人上交一份媒体流如果还是按照1M来算,那上行每个端1M,同时从服务器端获取一份混合过的媒体流还是按照1M算,那每个端上下行总共就是2M;结合上面所述MCU架构
一个端同时能承受更多的人开启视频

SFU架构(Selective Forwarding Unit)

SFU架构服务端压力相对较小,SFU架构看似和MCU一样都有一个中心化的服务器,但是SFU的服务器只负责转发媒体或者存储媒体;不直接做编码、转码、解码、混合这些算力要求较高的工作;SFU服务器接到RTP包后直接转发;
SFU架构占用带宽适中,例如上图,SUF架构参与会议的4个端每个端首先要把自己的流发给服务器,所以每个端上行1M带宽,同时从服务器获取转发过来的其它3个参会人员的媒体流也就是下行3M,这样每个端上下行加一起就是4M;所以它占用端上的带宽在Mesh架构和SFU之间;这种适中的带宽占用在即将到来的5G时代你可以想象!!!!
SFU架构对端和媒体流的控制更简单,还是上面的场景,我想仔细端详日思夜想的小姐姐将她的画面调大,只需要在端上直接放大就行了;另外整个会议中只让我成为最靓的仔,进行美颜啥的实现起来也不算是啥问题了,虽然对端的要求高,但是现在手机或者电脑算力过剩啊,边缘计算发挥到极致,哈哈……,为企业省钱

总结

互联网时代要求更个性化的体验(美颜,更个性化的控制等等),更大的容积率(也就是更多的用户同时在线);总的来说SFU架构更适合互联网时代;ZOOM会议和腾讯会议这两个比较出名的互联网会议系统都是SFU架构;所以跟风一波后续深入的研究SFU架构;
虽然SUF架构对端的算力要求比较高,更多的计算放到了端上,不过在视频会议或者直播的场景下面,跟多的是一个大画面,其它若干个小画面,而且通过交互控制,例如:同时只显示若干个小画面,滚动的时候动态的再获取其它的参会人员的视频生成小画面;
SFU只负责转发流,所以更高的并发,同时它逻辑简单,更容易的构建高负载架构

参考文章

一文带你了解webrtc基本原理(动手实现1v1视频通话)_go webrtc-CSDN博客

 Webrtc音视频会议之Mesh/MCU/SFU三种架构_webrtc_千里授渔-即构开发者社区 (csdn.net)

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

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

相关文章

[node]Node.js 模块系统

[node]模块系统 Node.js中的模块系统模块的使用模块的导入模块的导出导出多个值导出默认值导出可传参的函数 文件查找策略从文件模块缓存中加载从原生模块加载从文件加载 Node.js中的模块系统 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。 …

如何选择出最适合的backbone模型?图像分类模型性能大摸底

到2023年图像分类backbone模型已经拓展到了几十个系列,而有的新算法还在采样vgg、resnet做backbone,比如2022年提出的GDIP-YOLO还在用VGG16做IA参数预测,那是在浪费计算资源并限制了模型性能的提升,应该将目光放到现在的最新模型中…

【ARM Cortex-M 系列 5 -- RT-Thread renesas/ra4m2-eco 移植编译篇】

文章目录 RT-Thread 移植编译篇编译os.environ 使用示例os.putenv使用示例python from 后指定路径 编译问题_POSIX_C_SOURCE 介绍编译结果 RT-Thread 移植编译篇 本文以瑞萨的ra4m2-eco 为例介绍如何下载rt-thread 及编译的设置。 RT-Thread 代码下载: git clone …

GIT具体配置步骤详解

GIT配置具体步骤如下 SDK 使用 Repo 工具管理,拉取 SDK 需要配置安装 Repo 工具。 Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workf…

Java小案例-Sentinel的实现原理

前言 Sentinel是阿里开源的一款面向分布式、多语言异构化服务架构的流量治理组件。 主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 核心概念 要想理解一个新的技…

操作符详解2

一、操作符的属性:优先级、结合性 C语言的操作符有2个重要的属性:优先级、结合性,这两个属性决定了表达式求值的计算顺序。 1.优先级 优先级指的是,如果一个表达式包含多个运算符,哪个运算符应该优先执行。各种运算…

C++:第九讲前缀和与差分

Everyday English Your optimal career is simply this: Share the real you with physical world through th e process of creative self-expression. 你的最佳职业很简单,就是这样:通过创造性自我表达的途径和世界分享真实的你。 前言 这节课带你们…

Redis连接不上:主机无法连接虚拟机中的redis服务

1、报错信息 2023-12-22 16:01:25 : Connection: redis-dev > connection failed 2023-12-22 16:01:25 : Click on tree item: 0 2023-12-22 16:01:25 : Connection: Connection error: Connection refused 2、解决 主机<本地>无法连接虚拟机中的redis服务 首先…

智能优化算法应用:基于人工大猩猩部队算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于人工大猩猩部队算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于人工大猩猩部队算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.人工大猩猩部队算法4.实验参…

基于STM32的HC-SR501红外感应模块驱动与应用

一、 简介 HC-SR501红外感应模块是一种常用的人体红外感应模块&#xff0c;常用于安防监控、智能家居等领域。本文将介绍如何在STM32单片机上驱动和应用HC-SR501红外感应模块&#xff0c;实现基本的人体检测功能。 二、 模块原理 HC-SR501红外感应模块基于红外热释电传感器&am…

低代码如何助力企业数字化转型?

目录 一、低代码开发是什么&#xff1f; 二、低代码与企业数字化转型 1&#xff09;集成化 2&#xff09;智能化 3&#xff09;定制化 三、低代码开发平台对于企业数字化转型的优势 01、提供源码 02、私有化部署 03、敏捷开发 04、拓展能力 四、低代码带来的效益 以…

机器学习笔记 - 音频信号处理基础知识

一、音频处理基础 音频处理是指使用各种技术和算法对音频信号进行操作和修改。 它涉及对音频数据应用数字信号处理 (DSP) 方法,以增强、修改或分析声音。音频处理广泛应用于各种应用中,包括音乐制作、电信、语音识别、音频压缩等。 1、信号类型 连续信号:连续信号或连续时间…

微信小程序中miniprogram_npm文件夹怎么生成的(详解)

遇到问题 在小程序种引入vant组件&#xff0c;并没有找到目录中有miniprogram_npm文件夹&#xff0c;导致vant没有引入成功&#xff0c; 解决办法 vant引入一半&#xff0c; 尝试&#xff0c; 先构建npm&#xff0c;再继续引入vant 果然构建npm后&#xff0c;miniprogram_np…

SuperMap Hi-Fi 3D SDK for Unity基础开发教程

作者&#xff1a;kele 一、背景 众所周知&#xff0c;游戏引擎&#xff08;Unity&#xff09;功能强大&#xff0c;可以做出很多炫酷的游戏和动画效果&#xff0c;这部分功能的实现往往不仅仅是靠可视化界面就能够实现的&#xff0c;还需要代码开发。SuperMap Hi-Fi SDKS for …

k8s启动docker容器Error: Could not find or load main class ${start-class}报错

前行提要&#xff1a; 今天部署采集点服务&#xff08;docker项目&#xff09;发现报这个错误。 提出假设&#xff1a; 1&#xff0c;配置文件错误&#xff08;工程需要配置的东西比较多&#xff09; 之后开始一一排查&#xff0c;发现配置有问题&#xff0c;但是不是这个错误…

ceph块存储学习

目录 ceph的组件和功能 ceph的数据读写流程 ceph存储池学习 ceph的组件和功能 Ceph OSD&#xff1a;功能是存储数据&#xff0c;处理数据的复制、恢复、平衡数据分布&#xff0c;并将一些相关数据提供给Ceph Monitor,。 Ceph Monitor: 功能是维护整个集群健康状态&…

GEM5 Garent CPU cache消息传递路径:1. NI部分

简介 我们仔细分析下图怎么连的&#xff0c;以及消息传递路径。 图来自https://www.gem5.org/documentation/general_docs/ruby/ 代码的连接 fs.py->ruby.py-> gem5/configs/ruby/MESI_Two_Level.py 中的 create_system( options, full_system, system, dma_ports, b…

Redis实现日榜|晋级榜单|直播间榜单|排行榜|Redis实现日榜02

目录 前言 难点 解决方案 前言 通常一个主播的活动榜单大概会分为几个流程来进行&#xff0c;例如可以分为海选赛&#xff0c;晋级赛&#xff0c;突围赛&#xff0c;年度10大主播&#xff0c;年度总决赛。 1.海选赛&#xff1a;从平台所有的主播中进行选拔&#xff0c;在海…

Ubuntu 常用命令之 cal 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 cal命令在Ubuntu系统下用于显示日历。它可以显示任何特定月份或整个年份的日历。 cal命令的参数如下 -1&#xff1a;只显示当前月份的日历。-3&#xff1a;显示前一个月、当前月和下一个月的日历。-s&#xff1a;指定日历的开始…

uni-app学习记录

uni-app官网学习记录 uni-app注意点记录 页面跳转注意事项 navigateTo, redirectTo 只能打开非 tabBar 页面。switchTab 只能打开 tabBar 页面。reLaunch 可以打开任意页面。不能在首页 onReady 之前进行页面跳转。 页面通讯 // 发起页面uni.$emit(update,{msg:页面更新})//…