前言
这篇文章其实就是自己的一个操作笔记和记录,由于emby和intel的官方文档,对这方面的叙述都不是很详细,并且有很多都已经很久没有更新了,使得很多编译步骤已经不能再用老的文档去实现了。在此结合了几位前辈大佬和其他踏坑者的经验,完成了一次vappi和qsv的安装,并且成功在emby上开启了核显硬解。
由于本人也是边摸索边实践,所以过程可能不尽完善,我很希望能够再操作一次,用于记录,让后续来人,可以方便简单的装上vappi和qsv并且实现emby服务端核显硬解。如果不着急搭建核显硬解的,可以联系我,当然前提是你的cpu是带有intel 600系核显的,并且能够给我服务器的root权限。如果是虚拟机系统的,当然直通显卡的前置步骤需要自己都做好,并且能够在系统里成功看到核显信息。
查看显卡信息
lspci | grep -i vga #input this command line
#output
00:02.0 VGA compatible controller: Intel Corporation HD Graphics P630 (rev 04)
有显示类似如上信息,说明系统已经认到显卡了,此时我们就可以开始操作了。
如果用的是Hetzner带核显的杜甫,请参考Hetzner杜甫启用intel核显部分
操作记录
环境介绍
Ubuntu 16.04 LTSC
GCC/G++ 4.9及以上版本
CMAKE 3.6及以上版本
安装环境
apt部分
sudo apt-get -y install autoconf automake build-essential make dh-autoreconf libass-dev libtool pkg-config texinfo zlib1g-dev libva-dev cmake mercurial libdrm-dev libvorbis-dev libogg-dev git libx11-dev libperl-dev libpciaccess-dev libpciaccess0 libncurses5-dev libpthread-stubs0-dev libxvmc-dev xutils-dev libsdl2-dev libxcb-shm0-dev xorg-dev intel-gpu-tools opencl-headers ocl-icd-*
确保gcc/g++版本大于等于4.9,cmake版本大于等于3.6
gcc/g++安装
# 检查版本
gcc -v
g++ -v
# 如果大于4.9,直接进入cmake部分;低于4.9,那就开始操作吧
sudo apt-get -y install gcc-4.9 gcc-4.9-multilib g++-4.9 g++-4.9-multilib
# 设置多版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 49
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 # 如果有的话
sudo update-alternatives --config gcc
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 49
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50 # 如果有的话
sudo update-alternatives --config g++
# 检查
gcc -v
g++ -v
cmake安装
# 检查
cmake --version
# 如果高于3.6,直接跳过这个部分,低于3.6,开始操作
# 卸载现有的cmake
sudo apt remove --purge --auto-remove cmake
# 下载cmake版本
version=3.13
build=3
mkdir ~/temp
cd ~/temp
wget https://cmake.org/files/v$version/cmake-$version.$build.tar.gz
tar -xzvf cmake-$version.$build.tar.gz
cd cmake-$version.$build/
# 安装
./bootstrap
make -j4
sudo make install
# 检查
cmake --version
备注:执行cmake --version时可能会提示-bash: /usr/bin/cmake: No such file or directory
解决方案:执行sudo find / -name cmake查找cmake被安装到哪里了(一般来说安装在/usr/local/bin/下面了),把cmake拷贝一份放在/usr/bin/下即可。
Linux内核操作
检查内核版本,vaapi需要Kernel 4.14.16
uname -ar
# 低于4.14的输出
Linux ubuntu1604-Flexget 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# 等于高于4.14.16的输出
Linux emby-hz 4.14.16 #1 SMP Wed Sep 2 00:20:29 CST 2020 x86_64 x86_64 x86_64 GNU/Linux
返回如上信息,根据自己实际情况选择是否要升级内核
升级内核
cd ~/temp
git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
cd linux-stable/
git checkout -b my_v4.14.16 v4.14.16
cp /boot/config-`uname -r` .config
make olddefconfig
make -j8
sudo make modules_install
sudo make install
坑:
编译linux-stable期间可能会出现 "bc: command not found " 问题
解决方案:sudo apt-get -y install bc
操作完内核更新后需要重启
sudo systemctl reboot
添加Oibaf PPA,安装最新的libva开发环境
sudo add-apt-repository ppa:oibaf/graphics-drivers
sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
从源码安装最新libva以及相关驱动
创建工作环境目录
cd temp
mkdir -p ~/vaapi
mkdir -p ~/ffmpeg_build
mkdir -p ~/ffmpeg_sources
mkdir -p ~/bin
Libva
cd ~/vaapi
git clone https://github.com/01org/libva
cd libva
./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
time make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
sudo ldconfig -vvvv
Gmmlib
mkdir -p ~/vaapi/workspace
cd ~/vaapi/workspace
git clone https://github.com/intel/gmmlib
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE= Release -DARCH= 64 ../gmmlib
make -j$(nproc)
Intel Media Driver
下载源码
cd ~/vaapi/workspace
git clone https://github.com/intel/media-driver
cd media-driver
git submodule init
git pull
mkdir -p ~/vaapi/workspace/build_media
cd ~/vaapi/workspace/build_media
cmake配置驱动
cmake ../media-driver \
-DMEDIA_VERSION="2.0.0" \
-DBUILD_ALONG_WITH_CMRTLIB=1 \
-DBS_DIR_GMMLIB=$PWD/../gmmlib/Source/GmmLib/ \
-DBS_DIR_COMMON=$PWD/../gmmlib/Source/Common/ \
-DBS_DIR_INC=$PWD/../gmmlib/Source/inc/ \
-DBS_DIR_MEDIA=$PWD/../media-driver \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu \
-DINSTALL_DRIVER_SYSCONF=OFF \
-DLIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
编译驱动
time make -j$(nproc) VERBOSE=1
安装驱动
sudo make -j$(nproc) install VERBOSE=1
赋权
sudo usermod -a -G video $USER
sudo usermod -a -G video emby
修改环境变量
nano /etc/environment
# 加入以下两行
LIBVA_DRIVERS_PATH=/usr/lib/x86_64-linux-gnu/dri
LIBVA_DRIVER_NAME=iHD
Libva-utils
cd ~/vaapi
git clone https://github.com/intel/libva-utils
cd libva-utils
./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu
time make -j$(nproc) VERBOSE=1
sudo make -j$(nproc) install
完成到这里,需要重启一次
sudo systemctl reboot
重启后继续下面的步骤
Intel Media SDK
cd ~/vaapi
git clone https://github.com/Intel-Media-SDK/MediaSDK msdk
cd msdk
mkdir build && cd build
cmake ..
make
make install
配置环境
sudo mkdir -p /opt/intel/mediasdk/include/mfx
sudo cp -vr /opt/intel/mediasdk/include/*.h /opt/intel/mediasdk/include/mfx
sudo nano /etc/ld.so.conf.d/imsdk.conf
# 将以下两行代码加入到这个文件
/opt/intel/mediasdk/lib
/opt/intel/mediasdk/plugins
# 保存退出
sudo ldconfig -vvvv
运行以下两条命令,确认输出是否正确(两条命令中,可能有一条是没有输出的,只要有一条输出即可
cat /opt/intel/mediasdk/lib/pkgconfig/libmfx.pc
cat /opt/mediasdk/lib/pkgconfig/mfx.pc
输出应为如下显示,
Name: mfx
Description: Intel(R) Media SDK Dispatcher
Version: 1.26 ((MFX_VERSION) % 1000)
prefix=/opt/intel/mediasdk
libdir=/opt/intel/mediasdk/lib
includedir=/opt/intel/mediasdk/include
Libs: -L${libdir} -lmfx -lstdc++ -ldl -lva -lva-drm -ldrm
Cflags: -I${includedir} -I/usr/include/libdrm
这时,离成功不远了,但是又需要重启一次了
sudo systemctl reboot
重启回来后继续
从源码编译安装FFmpeg
nasm
cd temp
cd ~/ffmpeg_sources
wget wget http://www.nasm.us/pub/nasm/releasebuilds/2.14rc0/nasm-2.14rc0.tar.gz
tar xzvf nasm-2.14rc0.tar.gz
cd nasm-2.14rc0
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
make -j$(nproc) VERBOSE=1
make -j$(nproc) install
make -j$(nproc) distclean
libx264
cd ~/ffmpeg_sources
git clone http://git.videolan.org/git/x264.git -b stable
cd x264/
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --enable-static --disable-opencl # 需要开启opencl的用这个flag “--enable-opencl” 替换命令中的 “--disable-opencl”
PATH="$HOME/bin:$PATH" make -j$(nproc) VERBOSE=1
make -j$(nproc) install VERBOSE=1
make -j$(nproc) distclean
如果开启了opencl(--enable-opencl),需要运行以下命令安装依赖,如果是disable则不需要
sudo apt install ocl-icd-*
libx265
cd ~/ffmpeg_sources
git clone https://bitbucket.org/multicoreware/x265_git.git
cd ~/ffmpeg_sources/x265_git/build/linux
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make -j$(nproc) VERBOSE=1
make -j$(nproc) install VERBOSE=1
make -j$(nproc) clean VERBOSE=1
libfdk-AAC
cd ~/ffmpeg_sources
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --prefix="$HOME/ffmpeg_build" --disable-shared
make -j$(nproc)
make -j$(nproc) install
make -j$(nproc) distclean
libvpx
cd ~/ffmpeg_sources
git clone https://chromium.googlesource.com/webm/libvpx
cd libvpx
./configure --prefix="$HOME/ffmpeg_build" --enable-runtime-cpu-detect --enable-vp9 --enable-vp8 \
--enable-postproc --enable-vp9-postproc --enable-multi-res-encoding --enable-webm-io --enable-better-hw-compatibility --enable-vp9-highbitdepth --enable-onthefly-bitpacking --enable-realtime-only --cpu=native --as=nasm
time make -j$(nproc)
time make -j$(nproc) install
time make clean -j$(nproc)
time make distclean
LibVorbis
cd ~/ffmpeg_sources
wget -c -v http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.6.tar.xz
tar -xvf libvorbis-1.3.6.tar.xz
cd libvorbis-1.3.6
./configure --enable-static --prefix="$HOME/ffmpeg_build"
time make -j$(nproc)
time make -j$(nproc) install
time make clean -j$(nproc)
time make distclean
FFmpeg
cd ~/ffmpeg_sources
git clone https://github.com/FFmpeg/FFmpeg -b master
cd FFmpeg
PATH="$HOME/bin:$PATH"
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig:/opt/intel/mediasdk/lib/pkgconfig" ./configure \
--pkg-config-flags="--static" \
--prefix="$HOME/bin" \
--bindir="$HOME/bin" \
--extra-cflags="-I$HOME/bin/include" \
--extra-ldflags="-L$HOME/bin/lib" \
--extra-cflags="-I/opt/intel/mediasdk/include" \
--extra-ldflags="-L/opt/intel/mediasdk/lib" \
--extra-ldflags="-L/opt/intel/mediasdk/plugins" \
--enable-libmfx \
--enable-vaapi \
--disable-debug \
--enable-libvorbis \
--enable-libvpx \
--enable-libdrm \
--enable-gpl \
--cpu=native \
--enable-libfdk-aac \
--enable-libx264 \
--enable-libx265 \
--extra-libs=-lpthread \
--enable-nonfree
PATH="$HOME/bin:$PATH" make -j$(nproc)
make -j$(nproc) install
make -j$(nproc) distclean
hash -r
emby设置
操作到这里习惯性重启以下,进入emby后,应该就可以在转码的地方打开高级,看到vappi的和qsv的设备出现了。用网页播放尝试一下硬解吧,实测P630的核显还是很给力的。
如果是用的本人或者其他docker版的emby,那么还需要对docker的配置文件进行设置
docker版emby配置
docker版氛围官方版和linuxserver版
以本人修改的linuxserver版为例,在docker里需要添加如下两个配置
volumes:
- /path/for/transcoding:/transcode #optional
devices:
- /dev/dri:/dev/dri
Hetzner杜甫启用intel核显
关于hetzner的杜甫,由于官方的默认系统,虽然可以认到显卡,但是bios里实际上是没有启用的,这里我是被坑了很久,最后翻阅了hz的官方文档,找到了相关解锁姿势
先放上Hetzner的官方文档,英语好的朋友可以直接根据文档操作。下面是我自己的记录,也方便将来hz更改页面有一个参考对照。
查看是否启用核显
在root用户的系统下,运行这条命令
ls -la /dev/dri
如果返回以下信息,说明iGPU默认disable了
ls: cannot access '/dev/dri': No such file or directory
如果返回以下信息,说明iGPU已经enable
total 0
drwxr-xr-x 2 root root 80 Sep 4 19:33 .
drwxr-xr-x 21 root root 4160 Sep 4 19:33 ..
crw-rw---- 1 root video 226, 0 Sep 4 19:33 card0
crw-rw---- 1 root video 226, 128 Sep 4 19:33 renderD128
这里建议hetzner的杜甫玩家,第一次配置iGPU,无论显示的上面哪种,都照着官方文档继续操作下去,因为我也是显示enable的,但是依然无法开启硬解,照着官方文档操作完,就成功开启了,让我百思不得其解。
开启iGPU
nano /etc/modprobe.d/blacklist-hetzner.conf # 编辑这个文件
# 将blacklist i915 和 blacklist i915_bdw 这两个驱动用#注释掉,编辑后的文件应为如下所示
### i915 driver blacklisted due to various bugs
### especially in combination with nomodeset
#blacklist i915
#blacklist i915_bdw
修改grub设置
nano /etc/default/grub.d/hetzner.cfg # 将此文件中的nomodeset字段删除,
# 如果是Ubuntu 18系统,此文件位置在 /etc/default/grub 目录下
编辑前的文件显示
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset consoleblank=0"
修改后的文件显示
GRUB_CMDLINE_LINUX_DEFAULT="consoleblank=0"
保存退出后,还需要执行一下命令将设置应用到系统
sudo grub-mkconfig -o /boot/grub/grub.cfg
操作完成,执行重启
sudo systemctl reboot
重启后,此时核显已经被启用
重新查看核显信息
ls -la /dev/dri
# 此时屏幕返回应如下所示
drwxr-xr-x 3 root root 100 Mar 2 17:57 .
drwxr-xr-x 20 root root 4400 Mar 2 17:57 ..
drwxr-xr-x 2 root root 80 Mar 2 17:57 by-path
crw-rw---- 1 root video 226, 0 Mar 16 19:55 card0
crw-rw---- 1 root video 226, 128 Mar 16 19:55 renderD128
另一种方法是利用lspci
来查看,这个命令可以提供更加详细的信息
sudo lspci -v -s $(lspci | grep VGA | cut -d" " -f 1)
# 此时屏幕应当返回如下
00:02.0 VGA compatible controller: Intel Corporation HD Graphics P630 (rev 04) (prog-if 00 [VGA controller])
Subsystem: Fujitsu Technology Solutions Device 121c
Flags: bus master, fast devsel, latency 0, IRQ 125
Memory at ee000000 (64-bit, non-prefetchable) [size=16M]
Memory at d0000000 (64-bit, prefetchable) [size=256M]
I/O ports at f000 [size=64]
[virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
Capabilities: [40] Vendor Specific Information: Len=0c <?>
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [ac] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [d0] Power Management version 2
Capabilities: [100] #1b
Capabilities: [200] Address Translation Service (ATS)
Capabilities: [300] #13
Kernel driver in use: i915
Kernel modules: i915
只要返回的信息中有Kernel driver in use: i915
的字样,标示核显已经启用