You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04下如何用FFplay硬解码播放MJPEG流以降低CPU占用?兼询Vulkan渲染器使用方法

Ubuntu 22.04下如何用FFplay硬解码播放MJPEG流以降低CPU占用?兼询Vulkan渲染器使用方法

TL;DR:在Ubuntu 22.04系统中,如何通过FFplay利用硬件加速播放来自WebCAM/HDMI采集设备的MJPEG流?

问题背景

我有几款廉价的HDMI采集设备,它们可以输出1920x1080分辨率的MJPEG流,其中一款设备的详细能力参数已确认支持对应格式与分辨率输出。

长期以来,我使用以下命令来播放流:

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

这个命令启动速度极快(仅需几毫秒),在我的Ryzen 5700G上占用约15%的单核心CPU,GPU占用9%。

但我想进一步利用硬件加速,于是尝试了以下命令:

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。

核心疑问

所以我想知道:

  • 是否有办法让FFplay启用硬件加速来降低CPU占用?
  • 另外,是否可以用新的Vulkan渲染器来播放MJPEG?如果可以,该如何编译FFmpeg以及如何使用?

备注:内容来源于stack exchange,提问作者Sertac TULLUK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:53:16