CentOS编译安装media-driver

发布于 2022-09-18  106 次阅读


Emby系列教程

Centos编译安装media-driver

  记录一次在Centos中编译安装新的媒体驱动,此驱动适用intel8代以上CPU,此前的vaapi-driver也就是i965已经将近2年未更新,推荐8代以上CPU都使用media-driver,不要再使用i965,此次演示环境为 Centos8Stream 版本,已提前安装 epel 源并设置中文环境和国内源。吐槽一句,Centos的包是真更新慢得批爆,要是源里有我干嘛还来掉头发研究这b东西


0x01 准备基础环境

  我安装的版本在当时已经是最新,GmmLib库依赖存在版本兼容性问题,如果想要编译更新的版本请参阅 与GmmLib的兼容性

# 01 启动PowerTools源,启用后才能正常安装部分相关依赖
dnf config-manager --set-enabled PowerTools
 
# 02 安装依赖项
dnf install autoconf libtool pkgconfig cmake make m4 gcc \
gcc-c++ clang  openbox mesa-filesystem mesa-libGL-devel \
libdrm-devel libX11-devel libXfixes-devel libffi-devel \
expat-devel libXext-devel libpciaccess-devel ocl-icd-devel \
scl-utils wayland-devel git-lfs -y

0x02 编译安装libva

# 下载源码包
wget https://github.com/intel/libva/archive/refs/tags/2.14.0.tar.gz
 
# 解压源码包,如果解压命令不存在可以尝试tar -zxvf 2.14.0.tar.gz,二选一即可
extract 2.14.0.tar.gz
 
# 进入工作目录
cd 2.14.0
 
# 这里有个坑,官方wiki给出的参数是
# ./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
# 实际测试下来后续编译包根本不识别,我也懒得再去加环境,所以建议使用我的参数
./autogen.sh --prefix=/usr --libdir=/usr/lib64 --enable-x11
 
# 编译并安装
make V=s && make install

0x03 编译安装 libva-utils

# 步骤和libva基本一致不多赘述
wget https://github.com/intel/libva-utils/archive/refs/tags/2.14.0.tar.gz -O libva-utils-2.14.0.tar.gz
 
extract libva-utils-2.14.0.tar.gz
 
cd libva-utils-2.14.0
 
./autogen.sh --prefix=/usr --libdir=/usr/lib64 --enable-x11
 
make V=s && make install

0x04 编译安装mfx_dispatch

wget https://github.com/lu-zero/mfx_dispatch/archive/refs/tags/1.35.1.tar.gz -O mfx-1.35.1.tar.gzar.gz
 
extract mfx-1.35.1.tar.gz
 
cd mfx_dispatch-1.35.1
 
./configure --prefix=/usr --libdir=/usr/lib64
 
make V=s && make install

0x05 编译安装MediaSDK

git clone https://github.com/Intel-Media-SDK/MediaSDK
 
cd MediaSDK/build
 
cmake ../ -B ./ \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib64 \
-DCMAKE_BUILD_TYPE=Release
 
make -j8 V=s && make install

0x06 编译安装GmmLib

这里也有个大坑,官方的狗比文档看不得,真要解决问题还得看issues

wget https://github.com/intel/gmmlib/archive/refs/tags/intel-gmmlib-22.0.2.tar.gz
 
extract intel-gmmlib-22.0.2.tar.gz
 
cd gmmlib-intel-gmmlib-22.0.2
 
mkdir build && cd build
 
cmake ../ -B ./ \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib64
 
make V=s && make install

0x07 编译安装media-driver

git clone https://github.com/intel/media-driver
 
cd media-driver
 
mkdir build && cd build
 
# 使用闭源着色器构建,听说性能会更好
# 如果想编译纯开源代码的驱动将倒数第二项参数
# -DENABLE_NONFREE_KERNELS=ON改为OFF即可
cmake ../ -B ./ \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib64 \
-DENABLE_KERNELS=ON \
-DENABLE_NONFREE_KERNELS=ON \
-DBUILD_TYPE=release-internal \
 
make && make install

0x08 测试

建议安装完成后重启一次系统

# 输入vainfo命令如果有类似下列输出即代表驱动已经安装成功
# Emby,Jellyfin,Ffmpeg等媒体服务就可以正常使用VAAPI进行核显硬件解码了。
vainfo

error: can't connect to X server!
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.14 (libva 2.14.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.2.1 ()
vainfo: Supported profile and entrypoints
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileNone                   : VAEntrypointStats
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointFEI
      VAProfileH264Main               : VAEntrypointEncSliceLP
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointFEI
      VAProfileH264High               : VAEntrypointEncSliceLP
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointFEI
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileVP8Version0_3          : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointFEI
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSlice
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD