我试图将电视捕捉从一台计算机本地流式传输到另一台计算机,但我的延迟时间比我想要的要高。
我的设置是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秒。
我想这意味着Elgato和RTMP服务器之间或者RTMP服务器和我的ffplay流之间存在瓶颈或者两者都存在。
我尝试的事情:
注意:我的RTMP NGINX配置中没有特殊选项。它是一个标准的live on
,而且几乎就是它。
诊断问题的最佳方法是什么?我希望得到它< 1秒。
谢谢!
答案 0 :(得分:1)
我的猜测是视频编码,视频解码引入了最大的延迟。假设你压缩到H.264(AVC) - 我会关闭B帧。
关于诊断 - 我会在客户端计算机上运行Wireshark。确保客户端和服务器时钟同步。然后我将RTMP流的时间戳与客户端的时钟进行比较。这应该可以让您了解编码延迟。总延迟减去编码可以解码延迟。您可能忽略了网络缓冲和传输延迟。
这是一个有趣的问题,业界为此提供了一些解决方案 - 例如http://www.ineoquest.com/。
答案 1 :(得分:0)
我认为在你的情况下,瓶颈是视频处理。通常,软件视频编码不是那么快。 如果降低视频质量,比特率等,则会添加更多处理并仅增加延迟。 如果您需要发送距离信号源太远的视频,只需使用HDMI等视频接口即可。它将通过视频如何(不处理) 如果您真的对网络流媒体感兴趣,请考虑使用特殊的硬件编码器设备,如PCI或外部设备。这些设备具有嵌入式硬件视频编码器,不使用CPU进行视频处理。通常硬件编码器的延迟小于1秒,但仍然是真实的陈述:"更多视频处理=更多延迟"