找到电视上的瓶颈捕获RTMP延迟

时间:2017-05-09 05:00:01

标签: ubuntu nginx video-streaming rtmp live-streaming

我试图将电视捕捉从一台计算机本地流式传输到另一台计算机,但我的延迟时间比我想要的要高。

我的设置是12GB,i5 x4 3.2ghz,Geforce 970,带有Elgato HD60 Pro采集卡。此计算机正在运行安装了Nginx + RTMP(https://github.com/arut/nginx-rtmp-module)的Ubuntu实例。

它带有捕获/流媒体软件,可让您调整带宽+分辨率。它设置为在rtmp://192.168.1.200/capture流式传输到本地RTMP。

在我的接收设备上,我尝试过使用VLC(开放式网络)和FFPLAY(ffplay -fflags nobuffer rtmp://192.168.1.200/capture -loglevel verbose)。

FFPLAY的延迟小于VLC,考虑到nobuffer标志,它似乎有意义。然而,在我看到正确的更新之前,它仍然是大约2-3秒。

  • 捕获预览的响应时间几乎是立即的(约100毫秒)
  • 来自FFPLAY流的响应时间在2-3秒之间

我想这意味着Elgato和RTMP服务器之间或者RTMP服务器和我的ffplay流之间存在瓶颈或者两者都存在。

我尝试的事情:

  • 从捕获软件增加1.00到8.00
  • 的Mbps
  • 从最高到最低降低捕获质量
  • 将捕获的分辨率从1080降低到720,降至标准
  • 将帧速率从60fps降低到30fps
  • 使用FFPLAY代替VLC

注意:我的RTMP NGINX配置中没有特殊选项。它是一个标准的live on,而且几乎就是它。

诊断问题的最佳方法是什么?我希望得到它< 1秒。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

这是一个有趣的问题,业界为此提供了一些解决方案 - 例如http://www.ineoquest.com/

答案 1 :(得分:0)

我认为在你的情况下,瓶颈是视频处理。通常,软件视频编码不是那么快。 如果降低视频质量,比特率等,则会添加更多处理并仅增加延迟。 如果您需要发送距离信号源太远的视频,只需使用HDMI等视频接口即可。它将通过视频如何(不处理) 如果您真的对网络流媒体感兴趣,请考虑使用特殊的硬件编码器设备,如PCI或外部设备。这些设备具有嵌入式硬件视频编码器,不使用CPU进行视频处理。通常硬件编码器的延迟小于1秒,但仍然是真实的陈述:"更多视频处理=更多延迟"