使用 Logitech C920 从 RPi Zero W 流式传输视频和音频时,ffmpeg 会滞后

使用 Logitech C920 从 RPi Zero W 流式传输视频和音频时,ffmpeg 会滞后

我一直在尝试使用 Raspberry Pi Zero 和 Logitech C920 网络摄像头设置婴儿监视器。它确实可以与 VLC (cvlc) 配合使用,但延迟太多,并且随着时间的推移情况会变得更糟。

因此,我尝试使用 ffmpeg,并获得了一些更好的结果。这是我目前所做的。

首先,我将网络摄像头设置为原生输出 h264 1080p(Pi Zero W 无法进行任何转码)。

v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=1

现在,如果我只使用

ffmpeg \
-f alsa \
-i hw:1,0 \
-vn \
-flags +global_header \
-acodec aac \
-ac 1 \
-ar 16000 \
-ab 16k \
-f rtp rtp://192.168.0.10:5002 > audio.sdp

它运行良好并且延迟大约为 1 秒(绝对可以接受)。

如果我只使用

ffmpeg \
-f v4l2 \
-vcodec h264 \
-i /dev/video0 \
-an \
-vcodec copy \
-pix_fmt yuv420p \
-r 30 \
-b:v 512k \
-flags +global_header \
-f rtp rtp://192.168.0.10:5000 > video.sdp

结果相同,延迟很小(由于某种原因,第一个 -vcodec 是强制网络摄像头输出 h264 所必需的)。

然而,当我同时使用

ffmpeg \
-f v4l2 \
-vcodec h264 \
-i /dev/video0 \
-f alsa \
-i hw:1,0 \
-an \
-preset ultrafast \
-tune zerolatency \
-vcodec copy \
-pix_fmt yuv420p \
-r 30 \
-b:v 512k \
-flags +global_header \
-f rtp rtp://192.168.0.10:5000 \
-vn \
-flags +global_header \
-acodec aac \
-ac 1 \
-ar 16000 \
-ab 16k \
-f rtp rtp://192.168.0.10:5002 > both.sdp

延迟时间增加至约 10 秒,音频和视频不同步。有人知道原因吗?

我尝试过 UDP 和 TCP 来代替 RTP,但延迟总是高,即使只有音频/视频。

任何建议都将不胜感激。

PS 在客户端(MacOS)我接收

ffplay -protocol_whitelist file,rtp,udp -i file.sdp

相关内容