问题:为什么要搞这么多架构?

webrtc虽然是一项主要使用p2p的实时通讯技术,本应该是无中心化节点的,但是在一些大型多人通讯场景,如果都使用端对端直连,端上会遇到很带宽和性能的问题,所以就有了下图的三种架构。

一、Mesh架构

即:每个端都与其它端互连。以上图最左侧为例,5个浏览器,二二建立p2p连接,每个浏览器与其它4个建立连接,总共需要10个连接。如果每条连接占用1m带宽,则每个端上行需要4m,下行带宽也要4m,总共带宽消耗20m。而且除了带宽问题,每个浏览器上还要有音视频“编码/解码”,cpu使用率也是问题,一般这种架构只能支持4-6人左右,不过优点也很明显,没有中心节点,实现很简单。

二、MCU (MultiPoint Control Unit)

这是一种传统的中心化架构(上图中间部分),每个浏览器仅与中心的MCU服务器连接,MCU服务器负责所有的视频编码、转码、解码、混合等复杂逻辑,每个浏览器只要1个连接,整个应用仅消耗5个连接,带宽占用(包括上行、下行)共10m,浏览器端的压力要小很多,可以支持更多的人同时音视频通讯,比较适合多人视频会议。但是MCU服务器的压力较大,需要较高的配置。

三、SFU(Selective Forwarding Unit)

上图右侧部分,咋一看,跟MCU好象没什么区别,但是思路不同,仍然有中心节点服务器,但是中心节点只负责转发,不做太重的处理,所以服务器的压力会低很多,配置也不象MUC要求那么高。但是每个端需要建立一个连接用于上传自己的视频,同时还要有N-1个连接用于下载其它参与方的视频信息。所以总连接数为5*5,消耗的带宽也是最大的,如果每个连接1M带宽,总共需要25M带宽,它的典型场景是1对N的视频互动。

目前,随着5G技术的推广,可以预见带宽越来越不是问题,所以SFU在未来,可能会更有优势。

建议:如果规模不大(5人以下) Mesh框架就够用了,毕竟实现简单;如果50人以下,且带宽有限,选择MCU比较适合;如果规模更大,且带宽良好,SFU相对更适合。

附上几个github上比较火的webrtc MCU/SFU server项目:

https://github.com/Kurento/kurento-media-server  (kurento官网的文档和示例很齐全,对于开发者来说,非常友好)

https://github.com/lynckia/licode (官网文档很少,学习曲线略陡峭)

https://github.com/jitsi/jitsi (据说性能不错,而且还提供了一个视频会话的子项目jitsi-meet,但是文档仍然不多,得生啃代码)

https://github.com/pion/webrtc/ (github上star很高,go语言开发,但目前好象尚不太成熟,文档也不是太全,未来看好)

参考文章:

https://webrtcglossary.com/mcu/

https://antmedia.io/webrtc-servers/

https://www.html5rocks.com/en/tutorials/webrtc/basics/

https://webrtcglossary.com/sfu/

https://www.jianshu.com/p/ac307371def4 (写得不错的一篇关于webrtc的架构文章)

最新文章

  1. Power-BI仪表盘文本框排行分析设计要点
  2. spring mvc 中文乱码 post与get的方法解决
  3. [转]15 个顶级 HTML5 游戏引擎
  4. SequoiaDB 1.5 版本发布
  5. JAVA中“==”与equals()方法区别
  6. (转载)linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
  7. AngularJS 的一些坑
  8. 坑爹BUG,没有详细的看还真看不出问题
  9. C# Parse和Convert的区别分析
  10. ASPNET 5 和 dnx commands
  11. MySQL数据库操作类(PHP实现,支持连贯操作)
  12. Git Extensions 和 Tortoisegit 到底是什么?Git For VS(Git For Visual Studio)(Visual Studio 中使用 Git)
  13. BZOJ1390 CEOI2008 Fences 凸包、Floyd最小环/DP
  14. (原创)odoo11配置邮件功能的那些事儿
  15. Spring MVC的Controller统一异常处理:HandlerExceptionResolver
  16. ios-Objective-C中的各种遍历(迭代)方式(转载)
  17. Xshell图形界面启动
  18. SpringBoot 中解决跨域请求
  19. oracle的JOB
  20. 二叉树及其遍历方法---python实现

热门文章

  1. ROS Tricks
  2. 创建workbook及相关操作
  3. IT兄弟连 Java语法教程 数组 多维数组 二维数组的声明
  4. 【shell脚本】自动磁盘分区,格式化,挂载===autoMount.sh
  5. 拎壶带你冲----教育类mysql用户表设计参考
  6. commonDispatchException 函数的逆向
  7. 在生成.net core 3.0程序时不包含nuget库
  8. .net core使用NLog日志
  9. 猪肉涨价飞快?让我们用python来预测一下今年最后一个月的猪肉价格吧!
  10. django6-orm进阶操作