笔者之前在开启ffmpeg硬件加速的相关操作都是基于ubuntu 22.04
,实际项目应用的docker镜像基于ubuntu20.04
使用相同的命令
apt-get install -y libmfx1 libmfx-tools \
libva-dev libmfx-dev intel-media-va-driver-non-free vainfo
也设置相关的环境变量,vainfo命令一直显示驱动程序初始化失败,使用strace vainfo
命令 发现是缺少了cplib.so
文件,查找该依赖文件是intel media driver 安装自带
,至此陷入僵局
此时并没有太多时间可以花在查找原因上,因此笔者选择手动安装
需要安装的:
以上从上至下可以说是下层依赖于上层的安装
基于intel media sdk的安装经验,其他所有依赖的安装路径都设置为/opt/intel/mediasdk/
intel media sdk 发布版本当中会说明以上需安装内容所对应的版本
以最新版本为例:
接下来的步骤也是基于最新发布版本进行的编译安装
apt-get install -y git make cmake autoconf meson libtool pkg-config build-essential gcc g++
LIBVA_VERSION=2.16.0
git clone https://github.com/intel/libva.git
cd libva/
git checkout $LIBVA_VERSION
./autogen.sh --prefix=/opt/intel/mediasdk/
make -j8
sudo make install
LIBVAUTILS_VERSION=2.16.0
git clone https://github.com/intel/libva-utils.git
cd libva-utils/
git checkout $LIBVAUTILS_VERSION
./autogen.sh --prefix=/opt/intel/mediasdk
make -j8
sudo make install
GMMLIB_VERSION=intel-gmmlib-22.2.0
git clone https://github.com/intel/gmmlib.git
cd gmmlib
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/intel/mediasdk ..
make -j8
sudo make install
MEDIA_DRIVER_VERSION=intel-media-22.5.4
git clone https://github.com/intel/media-driver.git
cd media-driver/
git checkout $MEDIA_DRIVER_VERSION
cd ../
mkdir build_media && cd build_media
cmake -DCMAKE_INSTALL_PREFIX=/opt/intel/mediasdk/ ../media-driver
make -j8
sudo make install
安装过程显示缺少了一些依赖,简单行事通过以下命令解决
apt-get install -y libx11-dev libva-dev
设置环境变量
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVERS_PATH=/opt/intel/mediasdk/lib/dri
PKG_CONFIG_PATH=/opt/intel/mediasdk/lib/pkgconfig
使用libva-utils带有的vainfo工具查看媒体驱动程序是否设置成功
/opt/intel/mediasdk/bin/vainfo
,如果发现有错误内容,分享一个从github Issue 中学到的一个小tip,使用 strace /opt/intel/mediasdk/bin/vainfo 可以看到具体是哪个环节出现了问题,是环境变量没有设置或者是缺少了某个依赖
编译过程出现了缺少相关依赖的错误,通过查找该依赖如何下载,先进行以下步骤
ONEVPL_VERSION=intel-onevpl-22.5.4
git clone https://github.com/oneapi-src/oneVPL-intel-gpu onevpl-gpu
cd onevpl-gpu
git checkout $ONEVPL_VERSION
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/intel/mediasdk ..
make -j8
sudo make install
MEDIA_SDK_VERSION=intel-mediasdk-22.5.4
git clone https://github.com/Intel-Media-SDK/MediaSDK.git msdk
cd msdk
git checkout $MEDIA_SDK_VERSION
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/intel/mediasdk ..
make -j8
sudo make install
参考该博客,进行以上的手动编译安装之后,参考博客中 javacpp-preset下重新编译ffmpeg
开始的步骤
如果安装ffmpeg过程出现缺少依赖过程,需要修改cppbuild.sh文件中ffmpeg 编译配置,lib文件和头文件路径上分别添加 /opt/intel/mediasdk/lib、/opt/intel/mediasdk/include
以上笔者还未真正找到为何在ubuntu20.04上使用系统自带的libva 和intel media driver版本会出现media driver初始化失败问题的底层原因,只是基于快速找到解决原本方法的方式进行的手动编译,过程若有不对请多加指正