Ubuntu 寻找电视捕获RTMP延迟的瓶颈

Ubuntu 寻找电视捕获RTMP延迟的瓶颈,ubuntu,nginx,video-streaming,rtmp,live-streaming,Ubuntu,Nginx,Video Streaming,Rtmp,Live Streaming,我正在尝试将电视捕获从一台计算机本地传输到另一台计算机,但我的延迟比我希望的要高 我的设置是一个12GB、i5 x4 3.2ghz、Geforce 970,带有Elgato HD60 Pro捕获卡。这台机器正在运行一个安装了Nginx+RTMP()的Ubuntu实例 它附带捕获/流媒体软件,允许您调整带宽+分辨率。它被设置为在rtmp://192.168.1.200/capture 在我的接收机器上,我尝试使用VLC(开放网络)和FFPLAY(FFPLAY-fflags nobuffer)rtm

我正在尝试将电视捕获从一台计算机本地传输到另一台计算机,但我的延迟比我希望的要高

我的设置是一个12GB、i5 x4 3.2ghz、Geforce 970,带有Elgato HD60 Pro捕获卡。这台机器正在运行一个安装了Nginx+RTMP()的Ubuntu实例

它附带捕获/流媒体软件,允许您调整带宽+分辨率。它被设置为在
rtmp://192.168.1.200/capture

在我的接收机器上,我尝试使用VLC(开放网络)和FFPLAY(
FFPLAY-fflags nobuffer)rtmp://192.168.1.200/capture -日志级详细信息

FFPLAY的延迟比VLC要小,考虑到
nobuffer
标志,这似乎是有意义的。但是,在我看到正确的更新之前,仍然需要2-3秒

  • 捕获预览的响应时间几乎是即时的(可能约100ms)
  • FFPLAY流的响应时间在2-3秒之间
我想这意味着Elgato和RTMP服务器之间或者RTMP服务器和我的ffplay流之间或者两者之间存在瓶颈

我尝试过的事情:

  • 在1.00和8.00之间增加捕获软件的Mbps
  • 将捕获质量从最高降低到最低
  • 将捕获分辨率从1080降低到720,达到标准
  • 将帧速率从60fps降低到30fps
  • 使用FFPLAY而不是VLC
注意:我的RTMP NGINX配置中没有特殊选项。这是一个标准的
直播
,差不多就是这样

诊断问题所在的最佳方法是什么?我想得到<1s


谢谢

我认为你的瓶颈是视频处理。通常,软件视频编码不是那么快。 如果降低视频质量、比特率等,则会增加更多处理,而只是增加延迟。 如果您需要将视频发送到离源不太远的地方,只需使用HDMI之类的视频接口即可。它将传送视频(无需处理)
如果你真正感兴趣的网络流考虑使用特殊的硬件编码器设备,如PCI或外部的。这些设备具有嵌入式硬件视频编码器,不使用CPU进行视频处理。通常硬件编码器的延迟小于1s,但这仍然是正确的说法:“更多视频处理=更多延迟”

我猜是视频编码和视频解码引入了最大延迟。假设压缩到H.264(AVC)-我会关闭B帧

关于诊断,我在客户端机器上运行Wireshark。确保客户端和服务器时钟同步。然后,我会将RTMP流中的时间戳与客户端的时钟进行比较。这会让您了解编码延迟。总延迟减去编码会给您解码延迟。您可能会忽略网络缓冲和传输延迟


这是一个有趣的问题,行业提供了一些解决方案,例如。

请建设性地回答问题。这种设置是有原因的。我没有花所有的时间来设置/写这个问题,因为我忘记了HDMI电缆。我发布的内容怎么会没有建设性?我也在尝试调整您对所选技术的期望。我还建议RTP。你可能不喜欢现实,但它是现实。我的问题是关于诊断哪一方的延迟更大并找到瓶颈存在的证据的最佳方法。它是粗体的。它并不是询问关于如何更改我的设置的建议。您可以使用ffplayer和nobuffer来测试延迟,请参阅此