如何减少延迟 - 来自网络摄像头的 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 流式传输的主要内容,如果未能解决你的问题,请参考以下文章

使用 RaspberryPi 摄像头流式传输 H264

从 PC 直播到 HoloLens 2 的方法

使用 VLC 流式传输时增加 fps 并减少持续时间

将 h.264 流包装在 mp.4 容器中并使用 nodejs 流式传输

使用 ffmpeg 将低延迟 RTSP 视频流式传输到 android

通过opencv和c ++从ip摄像头流式传输视频