ffplay hwaccel mjpeg 再生

ffplay hwaccel mjpeg 再生

TL;DR: Ubuntu 22.04 でハードウェア アクセラレーションを使用して FFPLAY 経由で WebCAM/HDMI キャプチャ デバイスから MJPEG ストリームを再生するにはどうすればよいですか?

長い説明:

1920x1080 解像度の MJPEG ストリームを出力できる安価な HDMI キャプチャ デバイスをいくつか持っています。

私のデバイスの機能は次のとおりです。https://pastebin.com/9b0yXjEi

長い間、私は次のワンライナーを使ってプレイしてきました。

ffplay -fflags nobuffer -f video4linux2 -framerate 30 -video_size 1920x1080 -input_format mjpeg /dev/hdmi-rpi

これは数ミリ秒でほぼ即座に起動し、Ryzen 5700G のシングル コア CPU の %15 + %9 GPU を使用します。

しかし、さらに進んで HW アクセラレーションを活用したいと考えました。そこで、次のことを試しました。

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 を使用します。

そこで、CPU 使用量を削減するために、FFplay で HWaccel を使用する方法があるかどうかを知りたいです。

さらに、新しい Vulcan レンダラーを MJPEG で使用する方法はありますか? もしそうなら、FFmpeg をコンパイルして使用する方法を教えてください。

関連情報