NodeJS SFU.、Janus、mediasoup或medooze.在webRTC应用程序中的作用是什么

de90aj5v  于 2023-02-18  发布在  Node.js
关注(0)|答案(3)|浏览(471)

我正在使用一个带有simple-peernpm包的webRTC应用程序。
我想知道所有这些主题的目的***(SFU.、Janus、mediasoup或medooze.)*以及如何集成它们以提高应用程序性能?
PS:我正在使用一个
node.js**服务器来捆绑我的体系结构上对等体之间的请求和信令。这些服务器和服务是使我的应用程序性能良好所必需的吗?
希望我能在这里找到答案...

30byixjq

30byixjq1#

在普通的webrtc中,每个节点都需要分别向其他节点发送和接收数据。假设有10个节点进行视频聊天。那么每个节点都必须同时发送9次视频,同时接收9次视频。每个节点都将使用大量的上传带宽,而这些带宽通常是不存在的。
SFU解决这个问题的方法是每个对等点只向媒体服务器发送一个流,并让该服务器完成到其他对等点的所有路由。这样,每个对等点只发送1个流,接收9个流。下载的最大下载带宽通常高于上传带宽。
还有一种叫做联播的东西,它可以根据对等体的可用带宽自动切换质量,我已经能够用mediasoup实现这一点。

egmofgnx

egmofgnx2#

根据我上面的问题和之后的许多研究,我发现:

SFU是引导WebRTC通信的技术(服务器端):

  • 如何在对等体之间产生(共享)流。
  • 如何在其他对等体中消费该媒体流。
  • 如果我可以说的话,生产者(共享流媒体的人)和消费者之间的拓扑结构是如何工作的。

这是关于它的全局思想,因为你必须更深入地实施。
我询问的服务如Mediasoup、Medooze...等,它们是实现SFU技术的服务。
你可以去其中一家学习如何实现SFU。

6ie5vjzr

6ie5vjzr3#

WebRTC SFU服务器可以:

  • 转发:只需要发送1个流到SFU,SFU转发到房间中的其他对等体。
  • 同播:如果流是同播流,SFU可以像MCU一样转发不同码率的流,但不需要转码,CPU开销更小。
  • 协议转换器:SFU还可以将WebRTC转换为其他协议,如通过RTMP发布到YouTube。
  • DVR:将WebRTC流录制为VoD文件,如MP4文件。
  • 网络质量:SFU提供了更好的网络质量,特别是在P2P不能被使能的情况下。
  • 防火墙遍历:对于企业防火墙后的对等方,UDP可能不可用,SFU可以使用HTTP(TCP/80)或HTTPS(TCP/443)端口。

前进

WebRTC的默认模型是P2P,如下所示:

PeerA(WebRTC/Chrome) --------> PeerB(WebRTC/Chrome)
PeerB(WebRTC/Chrome) --------> PeerA(WebRTC/Chrome)

如果一个房间里有三个参与者:

PeerA(WebRTC/Chrome) --------> PeerB(WebRTC/Chrome)
PeerA(WebRTC/Chrome) --------> PeerC(WebRTC/Chrome)
PeerB(WebRTC/Chrome) --------> PeerA(WebRTC/Chrome)
PeerB(WebRTC/Chrome) --------> PeerC(WebRTC/Chrome)
PeerC(WebRTC/Chrome) --------> PeerA(WebRTC/Chrome)
PeerC(WebRTC/Chrome) --------> PeerB(WebRTC/Chrome)

在P2P模型中,每个节点需要发送N-1个流,并从其他节点接收N-1个流,这需要大量的上传带宽。
SFU可以将流转发给其他对等体,如下所示:

PeerA(WebRTC/Chrome) ---> SFU --+--> PeerB(WebRTC/Chrome)
                                +--> PeerC(WebRTC/Chrome)
PeerB(WebRTC/Chrome) ---> SFU --+--> PeerA(WebRTC/Chrome)
                                +--> PeerC(WebRTC/Chrome)
PeerC(WebRTC/Chrome) ---> SFU --+--> PeerA(WebRTC/Chrome)
                                +--> PeerB(WebRTC/Chrome)

对于SFU模型,每个节点只需要发送1个流,接收N-1个流,因此该模型优于P2P,特别是当一个房间中有多个节点时。

同步直播

由于对等体的网络不同,所以SFU可以使用同播向对等体发送不同的比特率,其工作原理如下:

PeerA(WebRTC/Chrome) --1Mbps-> SFU --+--1Mbps----> PeerB(WebRTC/Chrome)
                                     +--500Kbps--> PeerC(WebRTC/Chrome)

由于PeerC网络比较差,SFU以500 Kbps的速率发送码流。
请注意,这需要PeerA使用AV 1编解码器,默认情况下不支持H.264,因此这不是一个完美的解决方案。
而且它也很复杂,PeerC可能不想要低比特率流,但它接受更大的延迟,所以这个解决方案并不总是有效。
注:同播与MCU不同,MCU需要大量的CPU开销来进行转码,MCU将一个房间中的流转换为1个流供对等端接收,因此它被用于一些场景,例如SIP嵌入式设备,其只接收1个流,包括视频和音频。
有许多SFU服务器可以做到这一点,例如SRSMediasoupJanusLicode
注:正确,不在2023.02,SRS联播功能尚未合并开发,它位于功能分支中。

协议转换器

有时您希望将WebRTC转换为实时流媒体,例如,打开网页并将摄像机流媒体发布到YouTube。
SFU是怎么做到的?它是这样工作的:

Chrome --WebRTC------> SFU ---RTMP------> YouTube/Twitch/TikTok
        (H.264+OPUS)        (H.264+AAC)

在该模型中,SFU只需要将OPUS的音频流转换为AAC,而视频流对于WebRTC和H. 264的RTMP都是旁路的。
由于音频转码的原因,很少有SFU服务器可以做到这一点,例如SRSJanus
注意:Janus需要ffmpeg来转换RTP包,而SRS在本地完成这项工作,所以它很容易使用。

硬盘录像机

SFU还可以将DVR WebRTC流转换为MP4文件,例如:

Chrome ---WebRTC---> SFU ---DVR--> MP4

这使您能够使用网页上传MP4文件。例如,允许用户录制相机的剪辑以反馈您的产品。
与直播类似,MP4文件更好地支持AAC,因此SFU需要将OPUS转换为AAC。
由于音频转码的原因,很少有SFU服务器可以做到这一点,例如SRS
注:我不确定哪些SFU服务器支持此功能,如果我遗漏了什么,请告诉我。

网络质量

在互联网上,SFU模型比P2P模型更好。考虑以下流程:

PeerA <----Internet--> PeerB

P2P看似简单高效,但实际上有很多路由器和网络设备,一般都是服务器,所以P2P模型的流程应该是:

PeerA <--------Internet----------> PeerB
         Routers, Servers, etc.

从网络传输的Angular 来看,SFU模型是类似的:

PeerA <--------SFU-Server----------> PeerB
         Routers, Servers, etc.

SFU的网络质量比P2P更好,不是关于服务器,而是你能够通过使用专用服务器甚至专用网络来控制传输网络。
但是对于P2P来说,你不能控制路由器和服务器,所有的节点都是客户端。
注意:TURN服务器模型也能提高网络质量,但SFU更好,因为你可以在SFU上使用一些QoS算法,如GCC,因为SFU服务器实际上是一个客户端,而TURN只是一个代理。
注:SFU集群由一组SFU服务器组成,也可以提高对等体跨国家时的质量。

防火墙遍历

对于企业防火墙后的某些用户,UDP不可用:

Firewall
            |
Chrome -----X---WebRTC--- Chrome(PeerB)
PeerA       |   (UDP)

更糟糕的是,某些防火墙只允许HTTP(TCP/80)或HTTPS(TCP/443),所以我们可以使用SFU监听HTTP(TCP/80)或HTTPS(TCP/443),它的工作原理如下:

Firewall
            |
Chrome -----+---WebRTC-------> SFU ---> Chrome(PeerB)
PeerA       |   (TCP 80/443)

注意:是的,TURN服务器也可以解决这个问题,coturn就是这样,但是注意TURN服务器通常分配一组端口,而不是固定的端口,所以TURN服务器不容易作为SFU服务器使用。
很少有SFU服务器可以做到这一点,例如SRSMediasoup
注:我不确定哪些SFU服务器支持此功能,如果我遗漏了什么,请告诉我。

相关问题