
TL;DR: ¿Cómo puedo reproducir transmisiones MJPEG desde mi dispositivo de captura WebCAM/HDMI a través de FFPLAY con aceleración de hardware en Ubuntu 22.04?
Descripción larga:
Tengo algunos dispositivos de captura HDMI económicos que pueden generar transmisiones MJPEG con una resolución de 1920x1080.
Estas son las capacidades de uno de mis dispositivos:https://pastebin.com/9b0yXjEi
Durante mucho tiempo, utilizo la siguiente frase para jugar:
ffplay -fflags nobuffer -f video4linux2 -framerate 30 -video_size 1920x1080 -input_format mjpeg /dev/hdmi-rpi
Esto se inicia casi de inmediato en unos pocos milisegundos y utiliza %15 de una CPU de un solo núcleo + %9 de GPU en mi Ryzen 5700G.
Pero quería ir más allá y aprovechar la aceleración HW. Entonces probé esto:
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 -
Pero esto usa %29 CPU + %49 GPU (también se inicia inmediatamente)
Y aún más pruebas con monovolumen:
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 ~ $
Con la configuración anterior, MPV usa %13 de CPU y %9 de GPU.
Entonces quiero saber si hay alguna manera de usar HWaccel con FFplay para poder reducir el uso de mi CPU.
Y una adición: ¿Existe alguna forma de utilizar el nuevo renderizador Vulcan con MJPEG? Si es así, ¿cómo compilar FFmpeg y cómo usarlo?