WebRTC服务端架构

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

众所周知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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习 WebRTC 服务端开发需要具备一定的网络编程和服务器编程基础。以下是几个可以帮助您高效学习 WebRTC 服务端开发的建议: 1. 熟悉网络编程和服务器编程:学习 WebRTC 服务端开发需要先了解网络编程和服务器编程的基本概念和知识,例如 TCP/IP 协议、HTTP 协议、WebSocket 协议等,以及常见的服务器端编程语言和框架。 2. 学习 WebRTC 的基础知识:WebRTC 是一种实时通信技术,需要了解 WebRTC 的基本概念、架构和 API,可以通过官方文档或相关书籍学习。 3. 实践 WebRTC 服务端开发:通过开发实际项目来提高自己的 WebRTC 服务端开发技能。可以参考一些开源项目,例如 Google 的 AppRTC 或 SimpleWebRTC,了解它们的实现原理和代码架构,并尝试自己实现一个简单的 WebRTC 服务端。 4. 参与在线课程和讨论组:有许多在线课程和讨论组可以帮助您学习 WebRTC 服务端开发。例如 Udemy 上的 WebRTC 课程或 Stack Overflow 上的讨论组等。 5. 探索官方文档和社区资源:WebRTC 社区很活跃,有很多官方文档和社区资源可以帮助您学习 WebRTC 服务端开发。例如 Google 的 WebRTC 官方文档和 GitHub 上的 WebRTC 开源项目等。 总之,学习 WebRTC 服务端开发需要不断地学习和实践,建立起一个稳固的网络服务器编程基础,以及深入理解 WebRTC架构和 API。 ### 回答2: 要高效学习WebRTC服务端开发,可以按照以下几个步骤进行: 1. 学习基础知识:首先了解WebRTC的基本概念、核心协议以及相关技术在服务端开发中的应用。可以通过阅读相关教程、参考书籍或者在线课程来学习。 2. 搭建开发环境:确定使用的开发语言和框架,配置好开发环境,包括安装相应的开发工具和运行时环境。推荐使用常见的语言如Node.js或Java,并选择适合的WebRTC库或框架。 3. 学习示例代码:选择一些经典的WebRTC服务端示例代码,通过阅读和理解代码逻辑,学习WebRTC的主要功能和开发方法。可以在GitHub等代码托管平台上找到一些优秀的示例项目。 4. 实践项目:通过自己的实践项目来深入理解WebRTC服务端开发。可以从简单的项目开始,逐渐增加复杂度,实践中发现问题并解决。可以尝试搭建一对一视频通话系统、多人视频会议系统等。 5. 持续学习和实践:WebRTC技术不断发展和更新,需要持续学习最新的发展动态和技术文档。可以关注相关的技术博客、在线社区和论坛,与其他开发者交流和分享经验。 6. 参与开源项目:如果有条件,可以参与一些开源的WebRTC项目,通过贡献代码和解决问题来提高自己的开发能力。 7. 持续改进和总结:在学习和实践的过程中,不断总结和改进自己的学习方法和技能,提高学习效率和开发质量。 总的来说,高效学习WebRTC服务端开发需要掌握基础知识、实践项目、保持持续学习和参与开源社区,不断提高自己的技术水平。 ### 回答3: 要高效学习WebRTC服务端开发,可以按照以下步骤进行: 第一步,了解WebRTC的基本概念和原理。WebRTC是一种实时通信技术,能够在浏览器之间直接传输音频、视频和数据。学习WebRTC的开发前,需要对它的工作原理有一个清晰的理解。 第二步,学习相关的编程语言和技术。WebRTC服务端开发需要掌握一种或多种编程语言,如JavaScript、Python等。此外,还需要了解网络编程、HTTP、WebSocket等相关技术。 第三步,寻找优质的学习资源。可以参考官方文档、在线教程、视频教程等来学习WebRTC服务端开发。在学习过程中,要注意选择权威、有深度的教程,以便获取更高质量的知识。 第四步,动手实践。通过实际的项目实践来巩固学习。可以尝试搭建一个简单的WebRTC服务端,实现基本的音视频传输功能。在实践过程中,会遇到各种问题和挑战,通过解决问题来加深对WebRTC开发的理解。 第五步,多参与交流和讨论。加入一些WebRTC开发者社区或论坛,和其他开发者交流经验、解答问题。在交流和讨论中,可以获取更多的实用经验和技巧,提高学习效果。 最后,要持续学习和保持对新知识和技术的追踪。WebRTC是一个快速发展的领域,新的技术和工具不断涌现。要保持学习的热情,及时了解并学习新的内容,以适应行业的变化和需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值