原文地址👇
https://blog.livekit.io/an-introduction-to-webrtc-simulcast-6c5f1f6402eb/
你想知道的关于Simulcast的一切
Simulcast是WebRTC中最酷的功能之一,它允许WebRTC会议在参与者网络连接不可预测的情况下进行扩展。在这篇文章中,我们将深入探讨Simulcast的工作原理,以及它如何与像LiveKit这样的SFU协作,以支持更大规模的WebRTC会议。
“慢速”用户(网速慢)的挑战
Selective Forwarding Units(SFU)已经成为基于WebRTC的会议的主流架构。它们的作用是将一个用户的数据转发给房间中的其他用户,从而显著减少每个用户必须发送的数据量。近年来由于SFU扩展相对简单,获得了相当大的普及。由于它们不需要对媒体进行编码/解码,因此转发数据通常只需要很少的CPU开销。
虽然直接转发接收到的流使得架构和程序变得简单,但真实的网络条件提出了一些挑战。具体来说,并非每个人都拥有足够快的互联网连接来接收其他人发布的流。从“慢速”用户加入会议的那一刻起,这个问题就变得非常明显。
用户C将收到断断续续的流
由于慢速用户的下行带宽不足以获取其他用户正在发送的高质量流,所以他们在接收端会遭受高数据包丢失,导致画面质量不连贯或出现黑屏/空白帧。随着下游带宽达到饱和,拥塞也会影响用户上传自己视频的能力。
更糟糕的是,慢速用户的WebRTC客户端将不断向其他发布参与者发送PLI(画面丢失指示)消息(通过SFU),因为它无法接收足够的数据包来渲染帧。当其他WebRTC客户端看到PLI数据包时,它们会通过生成新的关键帧来响应,这些关键帧需要发送给每个人,增加整个会话的带宽需求。增加的带宽需求可能触发级联效应,当它超过其他参与者的带宽限制时。
在一个大量人员的会议中,房间中有人连接欠佳的可能性会增加。每个会议最终都会遇到这个慢速用户的问题。所以,为了确保平滑和高质量的传输,我们有三个选择:
- 使用可缩放编解码器,如VP9或AV1
- 降低每个人的数据流比特率,以免超载慢速用户(即最低公共比特率)
- 向参与者发送独立的数据流,以适应每个用户的可用带宽
可伸缩视频编解码器
值得一提的是一