TL;DR:如何在 Ubuntu 22.04 上通过带有硬件加速的 FFPLAY 播放来自我的 WebCAM/HDMI 捕获设备的 MJPEG 流?
详细描述:
我有一些便宜的 HDMI 捕获设备,可以输出具有 1920x1080 分辨率的 MJPEG 流。
以下是我的某个设备的功能:https://pastebin.com/9b0yXjEi
很长一段时间以来,我都使用下面的一行代码来玩:
ffplay -fflags nobuffer -f video4linux2 -framerate 30 -video_size 1920x1080 -input_format mjpeg /dev/hdmi-rpi
它可以在几毫秒内立即启动,并使用我的 Ryzen 5700G 中的 %15 单核 CPU + %9 GPU。
但我想更进一步,利用硬件加速。所以我尝试了这个:
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -f v4l2 -framerate 30 -video_size 1920x1080 -input_format mjpeg -i /dev/hdmi-rpi -vcodec rawvideo -f matroska - | ffplay -i -
但这使用了 %29 CPU + %49 GPU(也立即启动)
并使用 MPV 进行更多测试:
stulluk ~ $ mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o=input_format=mjpeg,video_size=1920x1080,framerate=30 av://v4l2:/dev/hdmi-rpi
(+) Video --vid=1 (mjpeg 1920x1080 30.000fps)
[ffmpeg/video] mjpeg: overread 8
VO: [gpu] 1920x1080 yuvj422p
V: 00:00:15 / 00:00:15 (99%)
[ffmpeg/demuxer] video4linux2,v4l2: Some buffers are still owned by the caller on close.
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor
[ffmpeg] ioctl(VIDIOC_QBUF): Bad file descriptor
Exiting... (Quit)
stulluk ~ $
通过上述设置,MPV 使用 %13 CPU 和 %9 GPU。
所以我想知道,是否有办法将 HWaccel 与 FFplay 一起使用,以便可以减少我的 CPU 使用率?
另外:有没有办法将新的 Vulcan 渲染器与 MJPEG 一起使用?如果是,如何编译 FFmpeg 以及如何使用它?