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
Comments NOTHING