Stash 无法调用硬件解码的排查

问题

在使用Stash 进行刮削/转码/预览生成的时候,如果能利用ffmpeg和硬件的编解码能力,可以减少cpu压力,并且提升速度(常见的硬件解码提速至少达到了CPU的软解的5+x。

我用的是HD530 i5-6500 的核显,在一开始尝试硬件解码的时候, intel_gpu_top显示没有调用gpu的视频功能。故排查解决

解决方案

1. 安装最新版的stash

最新版的stash其实在硬解已经有不少的软件适配提升了,升级到新版会减少后续的折腾方式。我用的是docker的0.31.1版本

2. 确保驱动安装和设备的挂载

默认的alpine驱动并不一定支持所有intel gpu command: sh -c "apk add --no-cache libva-intel-driver onevpl intel-media-driver && exec /usr/bin/stash" 将启动命令转为这个则可以在避免手动构建docker镜像的时候依旧获得稳定的环境,唯一小缺点则是需要在重新创建容器的时候重新下载(并不算很大的驱动,所以并不麻烦)

在与image同级别设定devices,将gpu挂载到容器内使用

    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
      - /dev/dri/card0:/dev/dri/card0

3. 【重要】检查ffmpeg支持

stash有自动的硬解加速检测,如果成功了,可以看到如下的日志,如果没有则需要检测ffmpeg支持。

硬解是否支持这一步非常重, 我在这里踩了不少的坑,其中需要注意的是

  1. ffmpeg path是否正确,可以通过手动设置ffmpeg来避免在stash内重新下载了不兼容的ffmpeg。

  2. 设定ffmpeg path后若还是失败,则可以手动执行path内ffmpeg命令手动转码,看是否成功,如果成功说明容器内gpu和ffmpeg配置其实是正确的,重新检查ffmpeg path也许能解决。

  3. 如果容器内ffmpeg手动执行也失败的话,需要检查ffmpeg是否兼容以及通过va_info 命令检查兼容性,此处可以借助LLM的帮助分析问题出现在哪。