使用Webcam实现基于FFmpeg的低延迟流媒体传输

6

我正在尝试配置ffmpeg使用网络摄像头进行实时视频流传输。我使用的ffmpeg编码器命令如下。

ffmpeg -f v4l2 -input_format yuyv422 -s 640x480 -i /dev/video0 -c:v libx264 -profile:v baseline -trellis 0 -subq 1 -level 32 -preset superfast -tune zerolatency -me_method epzs -crf 30 -threads 0 -bufsize 1 -refs 4 -coder 0 -b_strategy 0 -bf 0 -sc_threshold 0 -x264-params vbv-maxrate=2000:slice-max-size=1500:keyint=30:min-keyint=10: -pix_fmt yuv420p -an -f mpegts udp://192.168.1.8:5001

使用ffplay命令显示视频源的方法如下:
ffplay -analyzeduration 1 -fflags -nobuffer -i udp://192.168.1.8:5001

然而,我在视频流中遇到了0.5 - 1.0秒的延迟。有没有办法将其减少到低于100毫秒的数字。此外,当我使用x11grab替换v4l2相机捕获时,流几乎是实时的,我没有感受到任何明显的延迟。此外,将编码器从x264更改为mpeg2对延迟没有影响。此外,ffmpeg的统计数据显示,编码器以30fps的速率运行,这表明编码是实时的。这使我只能认为经历的延迟只有一个原因。

  • 在使用网络摄像头进行视频捕获时,是否存在缓冲区的显著延迟问题?
  • 我不认为传输延迟在这种情况下会产生影响,因为在相同条件下使用屏幕捕获时我没有看到延迟。
  • 这种延迟能否进一步降低?有没有其他编码器配置可以使用,代替我之前使用的那个?
2个回答

0

我使用了相同的发送指令,并且我尝试了在ffplay中,它对我起作用:

ffplay -analyzeduration 1 -fflags -nobuffer -probesize 32 -sync ext -i rtmp://localhost/live/STREAM_NAME

0

我在设置odroid spc和Windows PC之间的低延迟视频流系统时也遇到了许多问题。最终,我找到了一些设置,使延迟大约为500毫秒至1秒。

设置:在Ubuntu 18.04上使用odroid xu4上的ffserver,并通过wifi dongle连接到网络。 Windows 10 PC在同一wifi网络中从odroid流式传输。

我在odroid上运行以下ffserver配置(/etc/ffserver.conf)

HTTPPort 8090
HTTPBindAddress 0.0.0.0
MaxClients 1000
MaxBandwidth 10000

<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 50M
ACL allow 127.0.0.1
ACL allow localhost
</Feed>

<Stream test1.asf>
Format asf
Feed feed1.ffm
VideoFrameRate 30
VideoSize 640x480
VideoBitRate 600 
#VideoBufferSize 400
VideoQMin 1
VideoQMax 20
NoAudio
ACL allow 127.0.0.1
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
</Stream>

<Stream stat.html>
Format status
ACL allow 127.0.0.1
ACL allow localhost
</Stream>

并在Odroid上启动相机流

ffserver -f /etc/ffserver.conf & ffmpeg -f v4l2 -s 640x480 -r 15 -i /dev/video0 -vcodec libx265 -threads 2 -tune zerolatency http://localhost:8090/feed1.ffm

在我的Windows PC上,我尝试了几种设置以获得低延迟。使用VLC播放器,我无法将延迟降至8到10秒以下。 使用以下ffplay命令,我获得了约500毫秒的延迟:

ffplay -fflags -nobuffer -probesize 32 -i mmsh://ubuntu1804:8090/test1.asf

因此,-sync ext和-analyzeduration 1并未帮助减少延迟。

在odroid上使用libx264而非libx265并移除-thread 2标志时,“流媒体生成”也具有同样低的延迟。但将帧速率提高到30甚至增加分辨率会导致显著的延迟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接