Ubuntu 20.04的手动编译集成qsv的ffmpeg

文章目录

    • Ubuntu 20.04的手动编译集成qsv的ffmpeg
      • 一、前景
      • 二、手动编译安装ffmpeg的相关依赖
        • 1.编译所需依赖
        • 2.编译安装libva
        • 3.编译安装libva-utils
        • 4.编译安装gmmlib
        • 5.编译安装intel-media-driver
        • 6.验证intel-media-driver 安装
        • 7.编译安装 intel-media-sdk
        • 8. Javacv的ffmpeg及对应平台的依赖文件包
      • 三、文章说明

Ubuntu 20.04的手动编译集成qsv的ffmpeg

一、前景

笔者之前在开启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 安装自带,至此陷入僵局
此时并没有太多时间可以花在查找原因上,因此笔者选择手动安装

二、手动编译安装ffmpeg的相关依赖

需要安装的:

  • libva
  • libva-utils
  • gmmlib
  • intel-media-driver
  • intel-media-sdk

以上从上至下可以说是下层依赖于上层的安装
基于intel media sdk的安装经验,其他所有依赖的安装路径都设置为/opt/intel/mediasdk/

intel media sdk 发布版本当中会说明以上需安装内容所对应的版本
以最新版本为例:
Ubuntu 20.04的手动编译集成qsv的ffmpeg_第1张图片
接下来的步骤也是基于最新发布版本进行的编译安装

1.编译所需依赖

 apt-get install -y git make cmake autoconf meson libtool pkg-config build-essential gcc g++

2.编译安装libva

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

3.编译安装libva-utils

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
  

4.编译安装gmmlib

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

5.编译安装intel-media-driver

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

6.验证intel-media-driver 安装

使用libva-utils带有的vainfo工具查看媒体驱动程序是否设置成功
/opt/intel/mediasdk/bin/vainfo,如果发现有错误内容,分享一个从github Issue 中学到的一个小tip,使用 strace /opt/intel/mediasdk/bin/vainfo 可以看到具体是哪个环节出现了问题,是环境变量没有设置或者是缺少了某个依赖

7.编译安装 intel-media-sdk

编译过程出现了缺少相关依赖的错误,通过查找该依赖如何下载,先进行以下步骤
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

8. Javacv的ffmpeg及对应平台的依赖文件包

参考该博客,进行以上的手动编译安装之后,参考博客中 javacpp-preset下重新编译ffmpeg开始的步骤

如果安装ffmpeg过程出现缺少依赖过程,需要修改cppbuild.sh文件中ffmpeg 编译配置,lib文件和头文件路径上分别添加 /opt/intel/mediasdk/lib、/opt/intel/mediasdk/include
Ubuntu 20.04的手动编译集成qsv的ffmpeg_第2张图片

三、文章说明

以上笔者还未真正找到为何在ubuntu20.04上使用系统自带的libva 和intel media driver版本会出现media driver初始化失败问题的底层原因,只是基于快速找到解决原本方法的方式进行的手动编译,过程若有不对请多加指正

你可能感兴趣的:(音视频处理,ffmpeg,ubuntu,intel)