从 0 打造音视频直播系统
李超
前新东方音视频直播技术专家,前沪江音视频架构师
32579 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
WebRTC 1对1通话 (23讲)
从 0 打造音视频直播系统
15
15
1.0x
00:00/00:00
登录|注册

24 | 多人音视频实时通讯是怎样的架构?

思考
SVC模式
Simulcast模式
SFU不足
SFU优势
WebRTC
多人音视频实时通讯架构

该思维导图由 AI 生成,仅供参考

在前面的章节里,我们通过大量的篇幅介绍了 WebRTC 在浏览器上对实时通信的各种支持。WebRTC 本身提供的是 1 对 1 的通信模型,在 STUN/TURN 的辅助下,如果能实现 NAT 穿越,那么两个浏览器是可以直接进行媒体数据交换的;如果不能实现 NAT 穿越,那么只能通过 TURN 服务器进行数据转发的方式实现通信。目前来看,Google 开源的用于学习和研究的项目基本都是基于 STUN/TURN 的 1 对 1 通信。
如果你想要通过 WebRTC 实现多对多通信,该如何做呢?其实,基于 WebRTC 的多对多实时通信的开源项目也有很多,综合来看,多方通信架构无外乎以下三种方案。
Mesh 方案,即多个终端之间两两进行连接,形成一个网状结构。比如 A、B、C 三个终端进行多对多通信,当 A 想要共享媒体(比如音频、视频)时,它需要分别向 B 和 C 发送数据。同样的道理,B 想要共享媒体,就需要分别向 A、C 发送数据,依次类推。这种方案对各终端的带宽要求比较高。
MCU(Multipoint Conferencing Unit)方案,该方案由一个服务器和多个终端组成一个星形结构。各终端将自己要共享的音视频流发送给服务器,服务器端会将在同一个房间中的所有终端的音视频流进行混合,最终生成一个混合后的音视频流再发给各个终端,这样各终端就可以看到 / 听到其他终端的音视频了。实际上服务器端就是一个音视频混合器,这种方案服务器的压力会非常大。
SFU(Selective Forwarding Unit)方案,该方案也是由一个服务器和多个终端组成,但与 MCU 不同的是,SFU 不对音视频进行混流,收到某个终端共享的音视频流后,就直接将该音视频流转发给房间内的其他终端。它实际上就是一个音视频路由转发器。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

多人音视频实时通讯架构涉及WebRTC技术的应用,主要包括Mesh方案、MCU方案和SFU方案。在1对1通信模型中,WebRTC首先尝试两个终端之间是否可以通过P2P直接进行通信,如果无法直接通信,则会通过STUN/TURN服务器进行中转。Mesh方案通过多个终端之间两两相连,形成网状结构,但对带宽和资源消耗较大。MCU方案由一个服务器和多个终端组成星形结构,服务器对音视频流进行混合处理,但需要大量运算和资源消耗。SFU方案也由一个服务器和多个终端组成,但不对音视频进行混流,而是直接转发给其他终端,减少了服务器的压力。总的来说,Mesh方案利用客户端带宽资源,MCU方案技术成熟但资源消耗大,SFU方案减轻了服务器压力。因此,针对不同需求和场景,可以选择适合的多人音视频实时通讯架构。 SFU方案是一个媒体流路由器,接收终端的音视频流,根据需要转发给其他终端。SFU 在音视频会议中应用非常广泛,尤其是 WebRTC 普及以后。支持 WebRTC 多方通信的媒体服务器基本都是 SFU 结构。SFU 的拓扑机构和功能模型如下图:SFU方案架构图。SFU的优势在于对CPU资源消耗小、降低延迟、灵活适应不同网络状况和终端类型。然而,SFU也存在不同参与人观看多路视频可能不同步的问题。SFU实现还支持Simulcast和SVC模式,进一步提高了灵活性和适应性。 在三种多对多音视频通信架构中,SFU是优势最明显而劣势相对较少的一种架构方案。它被广泛采用,尤其配合Simulcast和SVC模式,使其更加灵活和性能更高。相比之下,Mesh架构在实际应用中几乎没有人使用,MCU架构在硬件视频会议中应用广泛但资源消耗大,而SFU架构则成为目前主流选择。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 打造音视频直播系统》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • Derek
    思考题:录制桌面?

    作者回复: 不错!

    2019-09-15
    2
    4
  • 宇宙之王
    老师您好,我的需求就是让多个用户通过浏览器观看服务器上的MP4视频时能实现边下载边播放,因为视频比较大,所以想到流媒体,搜到了咱们的教程,发现好像没有讲这方面内容,请问要实现我的需求采用什么架构比较好呢,或用什么开源的工具实现呢?谢谢老师!

    作者回复: 你这个应该是点播业务,可以看看阿里或腾讯的点播业务。

    2020-09-27
    3
  • 被雨水过滤的空气
    怎么样让浏览器和服务器建立webrtc连接呢?有什么开源的库吗?望老师解答!

    作者回复: 文章中不是已经介绍了medooze了吗,它就是一个开源的webrtc流媒体服务器库呀!另外,mediasoup, janus都是非常不错的webrtc流媒体服务器库

    2020-04-10
    2
    3
  • John
    SFU相当于中转服务器 他的outbound bandwidth流量会消耗很大呀 很烧钱呀 李哥有没有更省钱又不影响效果的方案呢

    作者回复: 没有,烧不烧钱其实与你的业务有很大关系,如果人数少的话你用Mesh方案是最省钱的。

    2019-09-17
    3
    3
  • 涂滔
    老师,请问怎么用webRTC实现播放以前录制的视频呢

    作者回复: 可以的,这块我没讲,你可以通过h5 的player 将播出的数据转给rtc 就好了

    2020-04-29
    2
    2
  • 使用Mesh架构,如果客户端全是Native的(iOS和Android设备,不允许浏览器接入,那么允许最对的连接数是多少)

    作者回复: 许多,许多!1万个,10万个一点问题都没有,关键点不在这里,你想你应该可以想瓶颈是什么

    2019-09-18
    5
    2
  • 小沙弥
    老师,我想问一下,浏览器中用js可以实现回音消除吗?我在做一个sip的终端与浏览器互通的项目,噪声回音怎么处理啊?

    作者回复: js里有回音消除的开关,应该是在 getUserMedia这个 API 的contraints中的音频配置中设置的,你可以将它打开。

    2019-09-09
    2
  • Walter
    1对1 方案中的云服务器需要2M的带宽,sfu方案是不是需要更高的带宽呢?

    作者回复: 必须的!

    2019-09-09
    2
  • 三角形小于零
    Mesh 的方案 : 能穿过去确实可以节省服务器资源。 但如果全部走了 relay ,那此时 Mesh 应该是3种中最耗服务器资源的吗?

    作者回复: Mesh就不走服务器

    2020-11-26
    1
  • A周峰
    李老师您好!media soap 怎么实现级连!jitsi meet 好像原生支持级连,这个适合商用吗

    作者回复: mediasoup 可以通过 piperouter来实现级联,如果你要商用的话,自己需要改造一下!

    2019-12-19
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部