webrtc媒体服务器介绍

2023-05-16

一、为什么需要流媒体服务?

众所周知webrtc原生的网络连接方式是P2P通信模型,即通信双方是对等的。如下图左侧图,通信双方直接进行音视频传输,中间的服务器仅做两端的信令交互。
将这种P2P方式扩展到多人通信也就是所谓的mesh架构,将会演变成下图右侧,这种去中心化架构在人数少(比如只有3、4个人)的时候还是有一定的优势:1、不需要额外的服务器 2、音视频直接传输质量和速度都很好。
但是随着人数的增加,网络拓扑将变得复杂,每个端点的网络带宽负担也会增加。这也就是为什么多人通话需要流媒体服务器的根本原因。

二、有哪些流媒体服务器架构?

本文我们将研究旨在支持浏览器中低延迟视频流的3种拓扑的优缺点:mesh、SFU、MCU。

2.1 mesh点对点(P2P)

P2P是WebRTC应用程序中最容易设置和最具成本效益的体系结构;它也是最不可扩展的体系结构。在网格拓扑中,两个或多个对等方(客户端)直接交谈,或者在防火墙的对面时,通过向它们转发音频、视频和数据流的TURN服务器交谈。

P2P应用程序可能是资源密集型的,因为编码和解码流的负担被卸载到每个对等机,这就是为什么当您只有少数并发用户时,它们性能最佳。虽然您可以通过配置P2P网格网络实现一定程度的可伸缩性,但最终还是会得到一个资源密集型和低效的应用程序。从好的方面来说,网格提供了最好的端到端加密,因为它不依赖于集中服务器对流进行编码/解码。
点对点流:n-1上游和n-1下游
优势

使用基本的WebRTC实现轻松设置
更好的隐私
成本效益高,因为它不需要媒体服务器
缺点

只能连接少数参与者,而不会显著降低流媒体质量
CPU密集型,因为流的处理被卸载到每个对等机

2.2 选择性转发单元SFU

SFU可能是现代WebRTC应用程序中最受欢迎的架构。简而言之,SFU是一个直通路由系统,旨在将一些流处理从客户端卸载到服务器。每个参与者将加密的媒体流发送到一次集中服务器,然后集中服务器将这些流转发给其他参与者,而无需进一步处理。虽然SFU比网格拓扑更高效——例如,在与n个参与者的通话中,每个客户端只有一个上游,而不是n-1上游——但客户端仍然需要解码和渲染多个(n-1)下游,随着参与者数量的增加,这将消耗客户端资源,降低视频质量,从而限制可伸缩性。
SFU流媒体:1个上游和n-1下游

优势

与P2P网格相比,上传带宽要求更低
流是分开的,因此每个流都可以单独呈现——允许完全控制客户端的流布局
缺点

可伸缩性有限
随着一些CPU负载转移到服务器,运营成本更高

2.3 多点会议单元(MCU)

多年来,MCU一直是大集团会议系统的支柱。这并不奇怪,因为它能够通过将大部分CPU密集型流处理从客户端卸载到集中服务器来提供稳定、低带宽的音频/视频流。

在MCU拓扑中,每个客户端连接到集中的MCU服务器,该服务器解码、重新缩放和混合所有传入的流到单个新流中,然后对其进行编码并将其发送给所有客户端。虽然客户端的带宽友好且CPU密集度较低——客户端不必处理多个流,而只需要解码和渲染一个流——但服务器端的MCU解决方案相当昂贵。将多个音频和视频流转码到单个流中,然后以多个分辨率实时编码,CPU非常密集,连接到服务器的客户端越多,其CPU要求就越高。

然而,MCU的最大好处之一是它易于与外部(遗留)业务系统集成,因为它将所有传入的流合并到一个易于消费的出库流中。

MCU流媒体

优势

带宽友好
复合输出简化了与外部服务的集成
当您需要合并许多流时,您唯一的选择(除非您使用XDN方法,我们将在下讨论)
缺点

CPU密集型;流越多,服务器就越大
由于集中处理,单一故障点风险
由于服务器上的计算负载,运营成本高昂

参考:
WEBRTC三种类型(Mesh、MCU 和 SFU)的多方通信架构 - 地铁程序员 - 博客园
webrtc笔记(3): 多人视频通讯常用架构Mesh/MCU/SFU - 菩提树下的杨过 - 博客园
3 Key Approaches for Scaling WebRTC: SFU, MCU, and XDN

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webrtc媒体服务器介绍 的相关文章

  • 免费域名证书最新申请方式大全

    目前市场环境下 xff0c 可获得域名SSL证书的方式有很多 xff0c 一般有付费和免费划分 对于想免费使用域名SSL证书的朋友 xff0c 这里收集整理了几个常用的SSL证书申请方式 对于SSL证书的用处 xff0c 简单的来说 xff
  • Let's Encrypt 在线证书申请:来此加密

    Let s Encrypt是国外一个公共的免费SSL项目 xff0c 由 Linux 基金会托管 xff0c 它的来头不小 xff0c 由Mozilla 思科 Akamai IdenTrust和EFF等组织发起 xff0c 目的就是向网站自
  • Setup Kubernetes on a Raspberry Pi Cluster easily the official way!

    转自 http blog hypriot com post setup kubernetes raspberry pi cluster Kubernetes shares the pole position with Docker in t
  • R语言网络分析1:BioC的graph图系

    BioC项目中 xff0c 网络图的处理通过不同的软件包进行 xff1a graph xff1a 图实现方法 类定义 xff08 graphNEL graphAM和graphBAM xff09 和基本函数RBGL xff1a 针对BioC
  • Doom-Emacs安装和基本使用方法

    1 Doom Emacs用前须知 Doom Emacs xff08 下面称为Doom xff09 是Emacs的一个比较复杂的配置包 xff0c 主要目的是使Emacs拥有Vim的出色编辑能力 xff0c 同时让新手配置起来相对容易些 但后
  • R语言网络分析2:graph函数和应用

    产生网络 自定义 BioC 中用得最多的网络类型可能是 graphNEL 类 使用 graphNEL 类的同名函数可以产生自定义网络 xff1a library graph str graphNEL gt function nodes 61
  • RAID扩容步骤

    以下为Debian系统的操作记录 xff0c DELL T630服务器 xff0c RAID5 xff0c 原有3块8T盘 xff0c 添加了2块8T新盘 xff0c 没有发生什么意外 1 添加硬盘 为保险起见 xff0c 关机后安装硬盘
  • R语言时间处理函数

    1 POSIXct和POSIXlt 把表示时间的字符串转成时间类型数据 xff0c 在R语言里面有两个基本的函数 xff1a as POSIXlt 和 as POSIXct 两者都是S3泛型函数 xff0c 根据参数的数据类型选择不同的转换
  • 时间序列分析:ts/mts基础数据类型

    时间序列是以时间为索引的数据 时间索引为等间距递增的时间序列称为规则时间序列 xff0c 其他为不规则时间序列 由于R语言核心组件的构建坚持以通用性为原则 xff0c 因此R的基础包中只定义了规则时间序列 xff0c 而不规则时间序列的定义
  • nginx+php+unoconv 失败?

    原因 xff1a web服务运行用户对自己的home目录没有写入权限 如果网站目录是通过fstab直接bind到 var www的 xff0c 要特别注意检查bind以后 var www目录的权限 xff08 服务器使用unoconv占用C
  • Emacs键盘练习方法

    Emacs里面什么都有 xff0c 比如俄罗斯方块游戏 xff08 tetris xff09 我要说的是 xff0c Emacs里的tetris这不只是个游戏 xff0c 它还是练习键盘的终极武器 玩这个游戏最常用的三个按键是左 右和上箭头
  • Qt中的各种编译器

    1 uic xff1a UI编译器 xff0c 将 ui文件转化为ui h文件 2 rcc xff1a 资源编译器 xff0c 将 qrc文件转换成qrc h文件 3 moc xff1a 元对象编译器 xff0c 将含有Q OBJECT的头
  • Bioconductor软件安装与升级

    本文已于2019 07 12按新版Bioconductor安装包BiocManager出现的问题进行更新 1 修改安装软件源 BioConductor安装需要下载很多文件 xff0c 如果不修改 xff0c 程序很可能是从国外网址下载 xf
  • 使用oligo软件包处理芯片数据

    本博客介绍过 Affy芯片的处理方法 xff0c 其中所使用的软件包有一定的局限性 xff0c 无法读取和分析一些新版Affy芯片 本文介绍oligo软件包的处理方法以解决这些问题 oligo软件包并不是新出现的软件包 xff0c 只因新类
  • R语言中的引号

    1 单引号和双引号 两者都可以用于表示字符串分隔 xff0c 用法和意义没有差别如果字符串包含有分隔符本身 xff0c 字符串内的分隔符引号需要转义 xff08 使用反斜杠 xff09 R语言字符串的打印 显示都是用双引号的形式表示 xff
  • ggplot2柱形图Y轴坐标扩展的简单方法

    ggplot2的坐标轴主要由映射aes确定 xff0c expand limits和coord cartesian虽然可以调整坐标轴刻度 xff0c 但对柱形图不大适用 不少使用者对扩展柱形图Y轴坐标很烦恼 xff0c 有人从源代码层面对开
  • Affy芯片ATH1-121501探针注释的处理

    Affy芯片ATH1 121501探针注释的处理 BioC有Affy芯片ATH1 121501 xff08 GPL198平台 xff09 的注释库文件 xff08 R包 xff09 xff0c 芯片分析后期处理经常要使用 xff0c 导出方
  • Debian Linux使用sun/oracle java

    1 下载Oracle JRE 从oracle 网站下载JRE源码 xff0c 如 jre 8u211 linux x64 tar gz xff0c 无需解压 2 构建JRE安装包 xff0c 并安装JRE 如果没有安装 java packa
  • NGINX + Let's encrypt免费SSL证书

    安装与配置过程不算复杂 xff1a 1 安装openssl和certbot sudo apt get install openssl ssl cert sudo apt get install python certbot nginx t
  • Emacs必修:使用dired管理文件

    1 基本设置 require 39 dired require 39 dired 43 require 39 dired sort ido mode 1 global dired hide details mode 1 setq dired

随机推荐

  • Emacs必修:缓冲区与ibuffer

    如果不太较真 xff0c 缓冲区可以当作是Emacs打开的文件 缓冲区操作就是对打开的文件进行保存 关闭和切换等操作 1 使用ibuffer代替list buffers defalias 39 list buffers 39 ibuffer
  • VNC+SSH的配置与使用(Debian xfce4)

    服务器端设置 安装vncserver xff1a sudo apt get install tightvncserver 配置桌面启动脚本文件 vnc xstartup xff0c 文件不存在则新建 xff0c 内容如下 xff1a bin
  • gcc 工作流程中的4个阶段(预处理、编译和优化、汇编和链接)

    GCC 编译器对程序的编译下图所示 xff0c 分为 4 个阶段 xff1a 预处理 xff08 预编译 xff09 编译和优化 汇编和链接 GCC 的编译器可以将这 4 个步骤合并成一个 预处理 xff1a 在这个阶段主要做了三件事 展开
  • 如何使用R批量处理文件

    免责声明 xff1a 运行下面的代码可能会对你的电脑和文件造成不可恢复的损害 xff0c 请确认明白代码的意义后再运行 xff01 本主对代码运行后果不负任何责任 1 基本函数 1 1 文件操作函数 这类函数很多 xff0c 下面列出的是基
  • MX-Linux大杀器——用U盘把系统和工作都随身带走

    MX能迅速跑到Linux发行版的前面 xff0c 秉承Debian最优良的稳定性传统而又放心引入较新Linux内核是最主要原因 这不是某些无知linux 撸客 在虚拟机上比划三两下就能理解的 本文和本人都不喜欢掺和发行版的争论 xff0c
  • 如何实现python构建打包供他人安装

    假如在同一级目录下有两个python文件 xff08 即python模块 xff09 xff0c 那么这两个模块不需要安装也能相互进行import引用 xff0c 但是不在同级目录下甚至不在同一项目中的模块怎么做到相互引用呢 xff1f P
  • 搭建python3.8虚拟环境+CUDA 11.2+cudnn 8.1.1安装+解决‘libcudart.so.11.0‘和‘libnvinfer.so.7‘动态库缺失

    搭建python虚拟环境 43 CUDA 43 cudnn安装 1 利用conda搭建python3 8环境搭建结束出现 xff1a 2 激活虚拟环境3 安装需要的包4 CUDA安装5 cuDNN安装 对应版本8 1 1 6 番外 xff1
  • Pivotal Greenplum® 6.9-管理员指南-管理系统-使用gpbackup和gprestore的并行备份--通过gpbackup和gprestore创建和使用增量备份

    通过gpbackup和gprestore创建和使用增量备份 gpbackup 和 gprestore工具支持创建AO表的增量备份以及从增量备份中恢复 增量备份会备份所有指定的堆表 xff0c 并仅在表发生更改时备份AO表 xff08 包括A
  • 显卡Memory Clock上限问题排查实践

    背景 有一台ASUS 笔电某次重启后 xff0c 发现memory clock被限制为最大300Mhz 而之前的上限是1500Mhz 感到很奇怪 xff0c 之前查过一次 xff0c 但并未解决 今日下决心排查 排查过程 1 xff0c 怀
  • sorry, this application cannot run under a virtual machine

    win11下运行某应用程序A xff0c 报此错误 网上不少文章采用关闭Hyper V的做法 xff0c 但查看后发现并未勾选Hyper V 经搜索 xff0c 有效的解决办法是 xff1a 以管理员权限打开cmd xff0c 执行 bcd
  • TP Link 路由器 设置

    入手某型号的TP LINK 路由器一台 希望做些定制化的设置 记录一下 1 xff0c 光猫拨号改为路由器拨号 光猫的型号是吉比特某款 xff0c 其地址是192 168 1 1 xff0c 此光猫没有无线 所接的路由器地址是192 168
  • 空目录批量添加文件.gitkeep

    背景 1 xff0c 有个项目存在多个空目录 为保持目录结构 xff0c 希望提交时也能提交这些空目录 手动搜寻空目录比较麻烦 xff0c 希望能采用命令行自动搜索 2 xff0c OS为WINDOWS 11 方法 1 xff0c 切换当前
  • 路由器拨号密码恢复

    背景 路由器拨号上网的密码因时间久远遗忘了 xff0c 恢复并记录下过程 步骤 1 xff0c 安装wireshark choco install wireshark y 注意 实践发现wireshark安装后 xff0c 启动提示还需要安
  • 指定 make install 的安装目录的方法

    方法1 xff1a configure prefix 61 your dir make make install 方法2 xff1a configure make make install DESTDIR 61 your dir 方法3 x
  • 如何删除outlook中的重复邮件

    问题背景 xff1a outlook 卸载重装后 xff0c 会把之前已收的邮件 xff0c 再次下载到本地 xff0c 出现大量重复邮件 解决思路 xff1a 搜索outlook邮件删除重复邮件的工具 xff0c 有outlook dup
  • Win10安装安卓模拟器入坑记

    笔记本换了硬盘 xff0c 安装Win10之后 xff0c 装了一堆软件和工具 xff0c 包括Docker for Windows等 xff0c 然后打算安装一个安卓模拟器 之前一直用的逍遥 xff0c 也没碰到啥问题 xff0c 这次就
  • C# 8.0 新特性

    使用C xff03 8 0中的模式 xff0c 做得更多 Visual Studio 2019预览版2已经发布 xff01 伴随它的还有一些C xff03 8 0的功能 xff0c 供您试用 主要是关于模式匹配 xff0c 但我会在最后提到
  • Android:java.io.IOException: Cannot run program "/system/xbin/su": error=13, Permission denied

    java io IOException Cannot run program 34 system xbin su 34 error 61 13 Permission denied 我的情况 同一套App程序 之前跑在Android4 0中没
  • 还在怕不可以和众多女朋友一起聊天,python教你创建多窗口,再也不怕露馅了

    需求描述 创建一个多用户 xff0c 多房间的全双工聊天室 多用户 xff0c 多房间的意思是可以有多个聊天室 xff0c 每个聊天室里可以有多个用户 xff0c 并且用户可以通过输入房间号进入聊天室 全双工的意思是聊天室中的用户在接收其他
  • webrtc媒体服务器介绍

    一 为什么需要流媒体服务 xff1f 众所周知webrtc原生的网络连接方式是P2P通信模型 xff0c 即通信双方是对等的 如下图左侧图 xff0c 通信双方直接进行音视频传输 xff0c 中间的服务器仅做两端的信令交互 将这种P2P方式