ffplay hwaccel mjpeg 播放

ffplay hwaccel mjpeg 播放

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

相關內容