
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以及如何使用它?