
TL;DR: Wie kann ich einen MJPEG-Stream von meinem WebCAM/HDMI-Aufnahmegerät über FFPLAY mit Hardwarebeschleunigung auf Ubuntu 22.04 abspielen?
Lange Beschreibung:
Ich habe einige billige HDMI-Aufnahmegeräte, die MJPEG-Streams mit einer Auflösung von 1920 x 1080 ausgeben können.
Hier sind die Funktionen eines meiner Geräte:https://pastebin.com/9b0yXjEi
Seit langem benutze ich zum Spielen folgenden Einzeiler:
ffplay -fflags nobuffer -f video4linux2 -framerate 30 -video_size 1920x1080 -input_format mjpeg /dev/hdmi-rpi
Dies startet fast sofort in wenigen Millisekunden und nutzt 15 % einer Single-Core-CPU + 9 % GPU in meinem Ryzen 5700G.
Aber ich wollte noch weiter gehen und die HW-Beschleunigung nutzen. Also habe ich Folgendes versucht:
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 -
Dies verbraucht jedoch 29 % CPU und 49 % GPU (wird auch sofort gestartet)
Und noch mehr Tests mit 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 ~ $
Mit dem obigen Setup verwendet MPV 13 % CPU und 9 % GPU.
Daher möchte ich wissen, ob es eine Möglichkeit gibt, HWaccel mit FFplay zu verwenden, damit ich meine CPU-Auslastung reduzieren kann?
Und noch eine Ergänzung: Gibt es eine Möglichkeit, den neuen Vulcan-Renderer mit MJPEG zu verwenden? Wenn ja, wie kompiliert man FFmpeg und wie verwendet man es?