Video streaming 在浏览器中以相对同步方式承载多个本地媒体流的延迟接近于零?

Video streaming 在浏览器中以相对同步方式承载多个本地媒体流的延迟接近于零?,video-streaming,streaming,rtmp,latency,flash-media-server,Video Streaming,Streaming,Rtmp,Latency,Flash Media Server,我正在寻找与一群朋友一起主持一个实时游戏流,并向一个流行的流媒体服务广播 我希望4个参与者之间的延迟最小,同步最大。 我已经在我的终端上设置了一个rtmp媒体服务器(使用),参与者可以通过OBS发送他们捕获的视频,我已经向他们提供了如何在他们的终端上实现最低延迟的说明 我还在discord上设置了一个聊天服务器 现在我有4个rtmp视频流被传送到我的媒体服务器,还有一个通过discord的组合音频馈送 我计划编写一个简单的web应用程序,它将由网格中的4个视频元素组成,以及一个用于我的目的的控制

我正在寻找与一群朋友一起主持一个实时游戏流,并向一个流行的流媒体服务广播

我希望4个参与者之间的延迟最小,同步最大。 我已经在我的终端上设置了一个rtmp媒体服务器(使用),参与者可以通过OBS发送他们捕获的视频,我已经向他们提供了如何在他们的终端上实现最低延迟的说明

我还在discord上设置了一个聊天服务器

现在我有4个rtmp视频流被传送到我的媒体服务器,还有一个通过discord的组合音频馈送

我计划编写一个简单的web应用程序,它将由网格中的4个视频元素组成,以及一个用于我的目的的控制面板(每个视频的音量、通知、观众的声音效果等),然后在OBS中捕获,并发送到一个名为Twitch的流行流媒体服务(你可能听说过它)

我最初尝试使用一个名为的库,但它有几个问题。在第一次加载视频流时,会有几秒钟的口吃,因为它似乎稳定了下来,偶尔会缓冲片刻,慢慢地让视频流与其他视频流失去同步。 浏览器中的视频比我接收的视频晚了大约3秒(我通过rtmp媒体服务器向自己发送所述视频流)。这不是一个大问题,但我希望尽快显示传入的视频,以便与discord提要保持一致

然后我尝试改变我的媒体服务器以输出HLS,并使用一个名为(适当地)的库作为浏览器。虽然这非常稳定,没有口吃,但在浏览器中播放时的延迟非常大,大约为20-30秒

进一步的研究使我相信rtmp或hls协议在播放过程中总是有很大的延迟

不考虑远程视频源——让我们考虑一下我在RTMP媒体服务器上有4个本地媒体源…这都是在我的PC机上发生的,所以没有网络延迟要考虑。


如何让这些本地视频源以尽可能低的延迟在浏览器中一次播放所有视频?

HLS是分段的。。。音频/视频记录几秒钟,然后上传、下载、缓冲和播放。从本质上讲,这具有很高的延迟

RTMP可以有更低的延迟,但正如您所看到的,它不是为低延迟而设计的。它不会试图追赶自己的生活


WebRTC是您想要使用的技术。最简单的方法是在其他编码器上使用基于web的捕获。(现在市面上有一些便宜的11美元HDMI capture USB加密狗,这使它更容易实现。)然后,到处都是网页,整个WebRTC堆栈负责为您保持较低的延迟。

我不确定我实际上如何做到这一点。我需要主持一个媒体服务器,我的所有朋友可以直接发送他们的媒体流通过OBS。我目前正在使用一个名为node media server的nodejs库。是否有您可以推荐的免费/开源库或软件包可以接受rtmp流并将其重新打包到WebRTC流中?我到处都能看到Wowza,但它需要许可证。@hedgehog90如果你需要保持实时性,你不能使用RTMP。它会一直工作,直到出现问题,不得不回绝,然后溪流就会分开,正如你所看到的。即使你对Wowza这样做,你仍然会有这个问题。如果他们必须使用OBS,那么您必须将OBS输出到可以捕获其输出并通过某个WebRTC客户端发送的位置。正如我提到的,最简单的方法就是使用浏览器。你也许可以用gstreamer装配一些东西,直接从OBS中使用,但我从来没有这样做过。Gstreamer支持WebRTC。设法让Ant Media Server在Ubuntu子系统(WSL2)上工作,该子系统接收rtmp流并将其作为WebRTC输出,但与我的rtmp服务器最初的2秒延迟相比,视频输出有10秒以上的延迟。。。然而,我发现,当我在mpv中直接播放rtmp地址时,节点媒体服务器的延迟显著减少,所以这只是一秒延迟的一小部分。然而,我还不能用flv.js重新创建它,它只接受http或websocket流。