我正在使用一个带有simple-peernpm包的webRTC应用程序。我想知道所有这些主题的目的***(SFU.、Janus、mediasoup或medooze.)*以及如何集成它们以提高应用程序性能?PS:我正在使用一个node.js**服务器来捆绑我的体系结构上对等体之间的请求和信令。这些服务器和服务是使我的应用程序性能良好所必需的吗?希望我能在这里找到答案...
30byixjq1#
在普通的webrtc中,每个节点都需要分别向其他节点发送和接收数据。假设有10个节点进行视频聊天。那么每个节点都必须同时发送9次视频,同时接收9次视频。每个节点都将使用大量的上传带宽,而这些带宽通常是不存在的。SFU解决这个问题的方法是每个对等点只向媒体服务器发送一个流,并让该服务器完成到其他对等点的所有路由。这样,每个对等点只发送1个流,接收9个流。下载的最大下载带宽通常高于上传带宽。还有一种叫做联播的东西,它可以根据对等体的可用带宽自动切换质量,我已经能够用mediasoup实现这一点。
egmofgnx2#
根据我上面的问题和之后的许多研究,我发现:
SFU是引导WebRTC通信的技术(服务器端):
这是关于它的全局思想,因为你必须更深入地实施。我询问的服务如Mediasoup、Medooze...等,它们是实现SFU技术的服务。你可以去其中一家学习如何实现SFU。
6ie5vjzr3#
WebRTC SFU服务器可以:
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服务器可以做到这一点,例如SRS、Mediasoup、Janus和Licode。注:正确,不在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服务器可以做到这一点,例如SRS和Janus。注意: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服务器可以做到这一点,例如SRS和Mediasoup。注:我不确定哪些SFU服务器支持此功能,如果我遗漏了什么,请告诉我。
3条答案
按热度按时间30byixjq1#
在普通的webrtc中,每个节点都需要分别向其他节点发送和接收数据。假设有10个节点进行视频聊天。那么每个节点都必须同时发送9次视频,同时接收9次视频。每个节点都将使用大量的上传带宽,而这些带宽通常是不存在的。
SFU解决这个问题的方法是每个对等点只向媒体服务器发送一个流,并让该服务器完成到其他对等点的所有路由。这样,每个对等点只发送1个流,接收9个流。下载的最大下载带宽通常高于上传带宽。
还有一种叫做联播的东西,它可以根据对等体的可用带宽自动切换质量,我已经能够用mediasoup实现这一点。
egmofgnx2#
根据我上面的问题和之后的许多研究,我发现:
SFU是引导WebRTC通信的技术(服务器端):
这是关于它的全局思想,因为你必须更深入地实施。
我询问的服务如Mediasoup、Medooze...等,它们是实现SFU技术的服务。
你可以去其中一家学习如何实现SFU。
6ie5vjzr3#
WebRTC SFU服务器可以:
前进
WebRTC的默认模型是P2P,如下所示:
如果一个房间里有三个参与者:
在P2P模型中,每个节点需要发送N-1个流,并从其他节点接收N-1个流,这需要大量的上传带宽。
SFU可以将流转发给其他对等体,如下所示:
对于SFU模型,每个节点只需要发送1个流,接收N-1个流,因此该模型优于P2P,特别是当一个房间中有多个节点时。
同步直播
由于对等体的网络不同,所以SFU可以使用同播向对等体发送不同的比特率,其工作原理如下:
由于PeerC网络比较差,SFU以500 Kbps的速率发送码流。
请注意,这需要PeerA使用AV 1编解码器,默认情况下不支持H.264,因此这不是一个完美的解决方案。
而且它也很复杂,PeerC可能不想要低比特率流,但它接受更大的延迟,所以这个解决方案并不总是有效。
注:同播与MCU不同,MCU需要大量的CPU开销来进行转码,MCU将一个房间中的流转换为1个流供对等端接收,因此它被用于一些场景,例如SIP嵌入式设备,其只接收1个流,包括视频和音频。
有许多SFU服务器可以做到这一点,例如SRS、Mediasoup、Janus和Licode。
注:正确,不在2023.02,SRS联播功能尚未合并开发,它位于功能分支中。
协议转换器
有时您希望将WebRTC转换为实时流媒体,例如,打开网页并将摄像机流媒体发布到YouTube。
SFU是怎么做到的?它是这样工作的:
在该模型中,SFU只需要将OPUS的音频流转换为AAC,而视频流对于WebRTC和H. 264的RTMP都是旁路的。
由于音频转码的原因,很少有SFU服务器可以做到这一点,例如SRS和Janus。
注意:Janus需要ffmpeg来转换RTP包,而SRS在本地完成这项工作,所以它很容易使用。
硬盘录像机
SFU还可以将DVR WebRTC流转换为MP4文件,例如:
这使您能够使用网页上传MP4文件。例如,允许用户录制相机的剪辑以反馈您的产品。
与直播类似,MP4文件更好地支持AAC,因此SFU需要将OPUS转换为AAC。
由于音频转码的原因,很少有SFU服务器可以做到这一点,例如SRS。
注:我不确定哪些SFU服务器支持此功能,如果我遗漏了什么,请告诉我。
网络质量
在互联网上,SFU模型比P2P模型更好。考虑以下流程:
P2P看似简单高效,但实际上有很多路由器和网络设备,一般都是服务器,所以P2P模型的流程应该是:
从网络传输的Angular 来看,SFU模型是类似的:
SFU的网络质量比P2P更好,不是关于服务器,而是你能够通过使用专用服务器甚至专用网络来控制传输网络。
但是对于P2P来说,你不能控制路由器和服务器,所有的节点都是客户端。
注意:TURN服务器模型也能提高网络质量,但SFU更好,因为你可以在SFU上使用一些QoS算法,如GCC,因为SFU服务器实际上是一个客户端,而TURN只是一个代理。
注:SFU集群由一组SFU服务器组成,也可以提高对等体跨国家时的质量。
防火墙遍历
对于企业防火墙后的某些用户,UDP不可用:
更糟糕的是,某些防火墙只允许HTTP(TCP/80)或HTTPS(TCP/443),所以我们可以使用SFU监听HTTP(TCP/80)或HTTPS(TCP/443),它的工作原理如下:
注意:是的,TURN服务器也可以解决这个问题,coturn就是这样,但是注意TURN服务器通常分配一组端口,而不是固定的端口,所以TURN服务器不容易作为SFU服务器使用。
很少有SFU服务器可以做到这一点,例如SRS和Mediasoup。
注:我不确定哪些SFU服务器支持此功能,如果我遗漏了什么,请告诉我。