如何减少延迟 - 来自网络摄像头的 VLC 流式传输
Posted
技术标签:
【中文标题】如何减少延迟 - 来自网络摄像头的 VLC 流式传输【英文标题】:How to reduce the delay - VLC Streaming from a web cam 【发布时间】:2012-02-25 12:10:48 【问题描述】:我正在通过 UDP 从我的网络摄像头/麦克风流式传输视频和音频。当我查看流(即使在同一台机器上)时,会有大约 4 秒的延迟。我尝试将 UDP 缓存设置为 0 或 1,但似乎没有帮助。我尝试降低视频和音频比特率,使用单声道声音并降低采样率都无济于事。
有没有人知道如何将延迟减少到更适合视频会议的时间,即
是否有我可以应用于查看器/流媒体的设置来提供帮助?
谢谢,
马克
【问题讨论】:
【参考方案1】:如果您使用 rtsp 协议流式传输到视频/音频,您可以在以下位置调整延迟
tools->preferences->all->input/codecs->demuxers->RTP/RTSP->缓存值
tools->preferences->all->input/codecs->demuxers->RTP->RTP去抖动缓冲长度
【讨论】:
注意:Caching value (ms)
和 RTP de-jitter buffer length (msec)
选项在夜间构建版本 VLC 2.1.0-git-20120203-0008 的 GUI 中不存在。甚至缺少 Input/Codecs->Access modules->UDP
树项,因此 GUI 中没有 UDP caching
选项。
他们现在称之为“网络缓存”,但它的工作方式似乎不同。我无法在 2.0.4 中获得我在 1.1.9(~100-150 毫秒)中获得的巨大延迟(更多,对于如此低的值变得不稳定)。
@YngveSneenLindal 在 1.1.9 中,您使用什么命令行来实现如此好的延迟?
我将 --rtsp-caching 设置为 130 到 200 之间的任何值。您必须进行实验。请记住,这种延迟可以被视频源的任何缓冲延迟所掩盖。我对 1.1.3 和 1.1.6 也有很好的体验。与 >= 2.0 相比,它们很摇滚【参考方案2】:
试试这个。
#!/bin/sh
ETH=eth0
cvlc --miface=$ETH v4l2:///dev/video0 :input-slave=alsa://hw:0,0 :sout=#transcodevcodec=h264,venc=x264preset=ultrafast,tune=zerolatency,intra-refresh,lookahead=10,keyint=15,scale=auto,acodec=mpga,ab=128:rtpdst=224.10.0.1,port=5004,mux=ts :sout-keep >/dev/null 2>/dev/null &
vlc1=$!
vlc --miface=$ETH rtp://224.10.0.1 >/dev/null 2>/dev/null &
vlc2=$!
wait $vlc2
kill -9 $vlc1
我使用 720p 网络摄像头有 2 秒的延迟,它产生约 2.5Mbit/s 的流量,一个核心的负载约为 30%。
【讨论】:
【参考方案3】:在我对使用网络摄像头进行 VLC 流式传输的研究中,我发现 UDP 多播流使用 WMV/ASF 容器 + WMV2 编解码器从戴尔 Creative 集成网络摄像头以 cif 视频大小进行转码时延迟 2-3 秒。
如果使用 MP4/MOV 容器 + H.264 编解码器,在比特率、fps 和比例设置相同的情况下,我得到的延迟是前者的两倍。
我在两个流媒体设置中都禁用了音频,因为我对此不感兴趣。
我使用两个 VLC 版本进行了研究:
VLC 1.1.11(最新的 Windows 稳定版本) VLC 2.1.0(最新的夜间构建版本)使用第一个版本,我可以从网络摄像头转码和流式传输,但无法正确播放流(它只是提供了一个变黑的视频流)
使用第二个版本,它可以很好地进行转码、流式传输和播放。
这项研究是在:
Intel Core 2 Duo T7250
4GB DDR2-667 SDRAM
SATA 7200 RPM HDD
GeForce 8400M GS 128MB GDDR3 (+ 128MB shared memory = 256MB video memory)
Windows XP Pro SP3
【讨论】:
我在笔记本电脑上尝试了类似的设置,处理器是 i7,但显卡是集成的 Intel 显卡。您知道流式传输视频时是否使用显卡处理器吗?那可能是我的问题。 是的,在Windows下,dshow://
是一个DirectShow接口;与任何 DirectX 接口一样,它将使用 DirectX GPU 的所有硬件加速功能,如果在服务器端或客户端检测到这些功能,可以提高性能。以上是关于如何减少延迟 - 来自网络摄像头的 VLC 流式传输的主要内容,如果未能解决你的问题,请参考以下文章
将 h.264 流包装在 mp.4 容器中并使用 nodejs 流式传输