WebRTC实现多人通话-Mesh架构【保姆级源码教程】

一、Mesh架构

WebRTC(Web Real-Time Communications)中的Mesh架构是一种将多个终端之间两两进行连接,形成网状结构的通信模式。以下是关于WebRTC的Mesh架构的详细解释:

  1. 基本概念:在Mesh架构中,每个参与者(或称为peer)都需要与其他所有参与者建立直接的媒体连接。例如,如果有A、B、C、D四个参与者,那么A需要分别与B、C、D建立连接,B也需要分别与A、C、D建立连接,以此类推。
  2. 带宽需求:在Mesh架构中,每个参与者都需要将自己的音视频流发送给其他所有参与者,同时也需要从其他参与者那里接收音视频流。因此,对于每个参与者来说,带宽需求会随着参与者数量的增加而线性增长。例如,如果每个音视频流占用1M带宽,那么每个参与者需要向其他三个参与者发送数据,总共需要3M上行带宽,同时从其他三个参与者接收数据,也需要3M下行带宽,即每个参与者总共需要6M上下行带宽。
  3. 优点:Mesh架构不需要服务器中转数据,充分利用了客户端的带宽资源,节省了服务器资源。此外,由于所有参与者都直接相连,因此网络延迟较低,实时性较好。
  4. 缺点:Mesh架构的缺点主要在于带宽消耗和客户端资源占用。由于每个参与者都需要与其他所有参与者建立连接,因此带宽消耗会随着参与者数量的增加而急剧增长。此外,为了建立和管理这些连接,客户端也需要消耗大量的系统资源。另外,由于要向其他所有参与者发送数据,因此在同等带宽条件下,支持的多人通话路数就相对有限,视频质量(码率)也比较低。
  5. 适用场景:Mesh架构比较适合网络状况较好、人数较少(如3-4人)的小型会议场景。在大型会议或网络状况较差的情况下,可能需要考虑其他架构(如MCU或SFU)来优化性能和带宽使用。

总的来说,WebRTC的Mesh架构是一种直接、简单的通信模式,适用于小型、实时性要求较高的场景。但在大型会议或网络状况较差的情况下,可能需要考虑其他更复杂的架构来优化性能和带宽使用。

二、设计

如果你已经能熟练掌握1V1通话(http://t.csdnimg.cn/P8n3x),那么设计Mesh构架的多人通话将十分简单。下面我将逐步分析多人通话的整个“握手”过程。

以A、B、C、D四人通话为例。
在这里插入图片描述

  1. A发起offer,A、B、C、D分别创建3个RTCPeerConnection实例,A分别与B、C、D协商,协商成功后A页面有1个localVideo与3个remoteVideo,实现多人通话。
  2. A发起offer后,B、C、D仅与A协商,B、C、D页面分别有1个localVideo与1个remoteVideo,仅仅实现了单人通话。
  3. A发起offer后,B发起offer,A与B已经通话跳过协商,B与C、D协商,此时B页面有1个localVideo与3个remoteVideo,实现多人通话。
  4. A发起offer后,B发起offer后,C、D分别有1个localVideo与2个remoteVideo,未实现与所有人通话。
  5. A发起offer后,B发起offer后,C(或D)发起offer,C跳过已经建立的A、B协商,仅仅与D协商,最终A、B、C、D都实现了对话房间的所有人通话。

以上过程4个用户供发起了3次(n-1)次offer,共协商了6次(n*(n-1)/2)。

三、实现

  1. 根据对话房间人数动态创建RTCPeerConnection实例与remoteVideo。
  2. 对端用户ID分别与RTCPeerConnection、remoteVideo建立映射。
  3. 信令服务器跳过已经建立通话的offer。

多人通话效果见下图:
在这里插入图片描述

需要源码与教学的请私信我(* ̄︶ ̄)

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

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

相关文章

车载VLAN的划分方法

文章目录 车载VLAN的划分方法车载VLAN的具体应用场景车载VLAN和传统的以太网VLAN有什么区别?如何在车载网络中部署VLAN?车载VLAN的配置需要考虑哪些因素?车载VLAN的划分方法 车载VLAN的划分方法需要根据整车的实际需求进行,以下是一些常见的划分方法: 按功能域划分:将车…

5 shell编程实战 之 expr用法大全

expr的用法大全1 expr用于计算 运算符及用于计算的数字左右2边至少有一个空格 否则会报错 使用乘号时 必须用反斜线转义 [rootlocalhost ~]# expr 2 * 2 4 2 用$()将计算表达式括起来 [rootlocalhost ~]# i5 [rootlocalhost ~]# i$(expr $i 6 ) [rootlocalhost ~]# echo $i…

map、set底层封装模拟实现(红黑树)

文章目录 一、红黑树1.1红黑树的规则:1.2红黑树的插入操作1.2.1不需要旋转(如果叔叔存在且为红,这里的C表示孩子,P表示父亲,U表示叔叔,G表示祖父),包含四种情况,无论孩子在哪里&…

对XYctf的一些总结

对XYctf的一些总结 WEB 1.http请求头字段 此次比赛中出现的: X-Forwarded-For/Client-ip:修改来源ip via:修改代理服务器 还有一些常见的字段: GET:此方法用于请求指定的资源。GET请求应该安全且幂等&#xff0c…

202003青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 运行下方代码段,输出的结果是(   )。 a=(1,2,3)print(type(a))A :<class ‘float’> B :<class ‘int’> C :<class ‘str’> D :<class ‘tuple’> 正确答案:D 试题解析: 第 2 题 【单选题】 content.txt中原来的内容…

企业想做新媒体矩阵怎么做?百家号,公众号,视频号,抖音,小红书等通用搞流量玩法参考

前言&#xff1a;这是白杨SEO原创第528篇。为什么想到写这个&#xff1f;因为很多企业或个人不知道在平台搞流量除了质量&#xff0c;还有一种方法就是人海战术&#xff0c;用数量取胜。今天简单分享一下&#xff0c;也许会给你启发&#xff0c;仅供参考。 分享大纲&#xff1…

雷军-2022.8小米创业思考-5-选择大于努力;倒在黎明前;互联网思维

第五章 我对互联网思维的理解 我的科技职业生涯起源于金山。金山作为一家老牌软件公司&#xff0c;在互联网时代似乎有些跟不上节奏。早年的金山也曾做过两次互联网转型。第一次是1999年年初成立卓越事业部&#xff0c;开始互联网业务尝试&#xff0c;后来又拆分成立卓越网。第…

“前人种树,后人乘凉”:【薪象营】五一探访活动弘扬传统美德

在五一劳动节这一天&#xff0c;唐刚携带【唐江军】的前成员&#xff0c;前往广州开展了一场特殊的慈善探访活动。这不仅是一个简单的慈善活动&#xff0c;更是唐刚希望向新成立的【薪象营】传承的一种精神和行动典范。 精神传承与实际行动 唐刚&#xff0c;【唐江军】的发起人…

3D模型实时变形算法

最近&#xff0c;在尝试渲染一些奇怪的形状后&#xff0c;我陷入了计算机图形学的困境。事实证明&#xff0c;对于我试图解决的具体问题&#xff0c;没有现有的选项完全适合我想要做的事情。几周后&#xff0c;我终于带着一些答案再次浮出水面&#xff0c;写了很多行代码&#…

webpack4和webpack5区别1---loader

webpack4处理图片和字体的loader file-loader file-loader的作用是处理webpack中的静态资源文件。File Loader可以将各种类型的文件&#xff0c;如图像、字体、视频等转换为模块并加载到Web应用程序中。它通过import或require语句引入文件资源&#xff0c;并将其放置在输出目…

​​【收录 Hello 算法】3.5 小结

目录 3.5 小结 1. 重点回顾 2. Q & A 3.5 小结 1. 重点回顾 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系&#xff0c;而物理结构描述了数据在计算机内存中的存储方式。常见的逻辑结构包括线性、树状和网状等。…

【蓝桥杯备赛国赛】5-5

文章目录 求阶乘双子数 求阶乘 求阶乘 分析k的范围&#xff0c;10的18次方。这个数字很大 想要末尾有0的存在必须要2和5&#xff0c;但是通过分析2的数目应该是远远多于5的&#xff0c;所以只要5的数目够多即可。所以for循环的层次也是10的九次方以上&#xff0c;必然会超时&…

优雅处理返回信息状态码:Result对象在Spring Boot中的应用

前言 在开发过程中&#xff0c;处理返回的信息状态码是一个重要的问题&#xff0c;尤其是在大型项目中。为了统一处理这些状态码&#xff0c;我在Spring Boot中创建了一个名为Result的Java对象&#xff0c;用于封装返回的信息和状态码。在本文中&#xff0c;我将分享如何实现这…

面试经典150题——判断子序列

面试经典150题 day26 题目来源我的题解方法一 双指针方法二 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;392 我的题解 方法一 双指针 分别使用一个指针控制两个字符串的遍历&#xff0c;当两个指针的位置的字符相同时&#xff0c;同时移动两个指针&#xf…

【信息系统项目管理师知识点速记】资源管理:规划资源管理

13.3 规划资源管理 定义&#xff1a; 规划资源管理是定义如何估算、获取、管理和利用团队以及实物资源的过程。 作用&#xff1a; 确定适用于项目资源的管理方法和管理程度。 输入&#xff1a; 项目章程项目管理计划 质量管理计划范围基准项目文件 需求文件项目进度计划风险…

python基础---垃圾回收

垃圾回收 Python的机制 小整数对象池 Python为了优化速度使用了小整数对象池, 避免整数频繁申请和销毁 Python的[-5, 256]这些整数的对象提前建立好了, 不会被垃圾回收, 在Python里面所有的这一些数据实际使用的是同一个对象, 单个的字母也是这样的 如果是一个字符串, 这一…

【算法系列】链表

目录 常用技巧 常用操作 leetcode/牛客题目 一、移除链表元素 二、反转链表 三、链表的中间结点 四、返回倒数第k个节点 五、合并两个有序链表 六、链表分割 七、链表的回文结构 八、相交链表 九、环形链表 十、环形链表 II 十一、随机链表的复制 十二、两数相加…

【图像增强(空域)】基于灰度变换的图像增强及Matlab仿真

1. 摘要&#xff1a; 空域内的图像增强就是调整灰度图像的明暗对比度&#xff0c;对图像中各个像素的灰度值直接进行处理。常用的方法包括&#xff1a;灰度变换增强和直方图增强。 2. 原理&#xff1a; 灰度变换增强是空域ne对图像进行增强的一种简单且直接的方法。灰度变换…

K8S Redis-Cluster安装(含redis-cluster-proxy、RedisInsight)

参考&#xff1a;在 K8S 中快速部署 Redis Cluster & Redisinsight 参考&#xff1a;Redis 中文文档&#xff08;一&#xff09; helm redis-cluster [rootk8s-master01 redis-cluster]# helm search repo redis-cluster NAME CHART VERSION APP …

使用CUDA的PyTorch进行张量重整化的gpu加速

使用CUDA的PyTorch进行张量重整化的gpu加速 摘要IntroductionAlgorithm and TorchTrg discussionModels and Results GPU-Acceleration of Tensor Renormalization with PyTorch using CUDA 摘要 作者展示了基于张量重整化群&#xff08;TRG&#xff09;方法的数值计算可以通过…