SFU 和客户端机器之间存在什么类型的连接?

What type of connection is present between SFU & Client machine?

我已经阅读了大量有关 WebRTC、ICE、Stun 和 Turn 的文章。

现在,谈到 SFU,我不确定客户端(最终用户浏览器)和 SFU 之间建立了什么连接(是 webrtc 连接吗??)。有人可以详细说明流程吗?

我的假设:当它是基于 SFU 的架构时。 SFU 和 Client 建立 webrtc 连接并相互发送数据。 SFU 知道当前房间里的所有人并相应地发送数据。 初始信号将 sfu 服务器的 ice 候选者获取到客户端,反之亦然。

我说得对吗?

是的,客户端和SFU之间的连接是WebRTC连接。 SFU 充当对等端点。

没有区别 对等点和 SFU 之间的 w3c 规范,除了它没有在基于浏览器的客户端中定义 reception of simulcast,你需要一个 SFU(或 MCU)来实现.

典型流量

  1. 通过信令在每个客户端和 SFU 端点之间进行定期 offer/answer 交换。
    • 如果服务器是提议者,它会向客户端发送接收联播的提议。一个正常的报价,除了客户可以在 setRemoteDescription 之后知道它将发送单个视频轨道的多个编码(层):
    pc.getSenders()[0].getParameters().encodings.length // > 1 means simulcast
    
    • 如果客户是报价者,它必须创建一个报价以发送联播,例如像这样:
    pc.addTransceiver(videoTrack, {sendEncodings: [
      {rid: "hi"},
      {rid: "mid", maxBitrate: 500000, scaleResolutionDownBy: 2},
      {rid: "low", maxBitrate: 150000, scaleResolutionDownBy: 4},
    ]});
    
    不必 对视频使用联播,但这很常见。发送音频更简单,通常也可以协商,以及客户端接收两者。
  2. 作为此协商的正常部分(在客户和 SFU 之间)交换 ICE 候选人。
  3. 一旦多个客户端连接,SFU(选择性转发单元)通常会接收来自每个参与者的音频和(联播a.k.a。多尺寸)视频,并且在 return通常向每个参与者发送来自当前正在发言的任何人的大视频和音频,以及来自其他所有人(的某些子集)的较小视频。具体的选择性转发逻辑通常由应用程序通过信令控制。

每个参与者都有一个终止于 SFU 中间盒的加密连接,而不是彼此之间。这意味着即使 WebRTC 始终是加密的,您与其他参与者的连接在技术上并不是端到端加密的。因此,请确保您信任或控制您的 SFU。 e2ee over SFU 的标准解决方案是 in development.