从 0 到 1 搞定 Intel 核显推流:硬件视频编码环境安装完整学习笔记
1. 确定源码版本
首先,需要通过下方链接确定需要安装代码库的版本号。本教程选择的是Media SDK 20.2.1,里面对应的libva、libva-utils版本为2.8.0,Gmmlib版本为20.2.2,Driver版本为20.2.0。
https://github.com/Intel-Media-SDK/MediaSDK/releases
2. VA-API编译安装
sudo apt-get install -y dh-autoreconf pkg-config
apt-get install -y libncurses5-dev libpthread-stubs0-dev libpciaccess-dev libxvmc-dev xutils-dev libsdl2-dev libxcb-shm0-devgit clone https://github.com/intel/libva.git
git clone https://github.com/intel/libva-utils.gitcd $WORKING_DIR/libva
git checkout <libva commit id>./autogen.sh --prefix=/opt/intel/libva --libdir=/opt/intel/libva/lib
make -j4
sudo make install
export PKG_CONFIG_PATH=/opt/intel/libva/lib/pkgconfig cd $WORKING_DIR/libva-utils
git checkout <libva-utils commit id>
./autogen.sh --prefix=/opt/intel/libva-utils --libdir=/opt/intel/libva-utils/lib
make -j4
sudo make install
3. Media-Driver编译安装
git clone https://github.com/intel/media-driver.git
git clone https://github.com/intel/gmmlib.gitcd $WORKING_DIR/gmmlib
git checkout <gmmlib commit id>cd $WORKING_DIR/media-driver
git checkout <media-driver commit id>cd $WORKING_DIR
mkdir -p build
cd $WORKING_DIR/buildcmake ../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=/opt/intel/media-driver \-DCMAKE_INSTALL_LIBDIR=/opt/intel/media-driver/lib \-DINSTALL_DRIVERS_SYSCONF=OFF \-DLIBVA_DRIVERS_PATH=/opt/intel/media-driver/lib/drimake -j8
sudo make install
测试media-driver
是否成功安装
export LIBVA_DRIVER_NAME=iHD
export LIBVA_DRIVERS_PATH=/opt/intel/media-driver/lib/dri
cd /opt/intel/libva-utils/bin
./vainfo
成功安装后将显示如下内容:
xx:/opt/intel/libva-utils/bin$ ./vainfo
libva info: VA-API version 1.15.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /opt/intel/media-driver/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_15
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.15 (libva 2.15.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 20.2.0 ()
vainfo: Supported profile and entrypointsVAProfileNone : VAEntrypointVideoProcVAProfileNone : VAEntrypointStatsVAProfileMPEG2Simple : VAEntrypointVLDVAProfileMPEG2Simple : VAEntrypointEncSliceVAProfileMPEG2Main : VAEntrypointVLDVAProfileMPEG2Main : VAEntrypointEncSliceVAProfileH264Main : VAEntrypointVLDVAProfileH264Main : VAEntrypointEncSliceVAProfileH264Main : VAEntrypointFEIVAProfileH264Main : VAEntrypointEncSliceLPVAProfileH264High : VAEntrypointVLDVAProfileH264High : VAEntrypointEncSliceVAProfileH264High : VAEntrypointFEIVAProfileH264High : VAEntrypointEncSliceLPVAProfileVC1Simple : VAEntrypointVLDVAProfileVC1Main : VAEntrypointVLDVAProfileVC1Advanced : VAEntrypointVLDVAProfileJPEGBaseline : VAEntrypointVLDVAProfileJPEGBaseline : VAEntrypointEncPictureVAProfileH264ConstrainedBaseline: VAEntrypointVLDVAProfileH264ConstrainedBaseline: VAEntrypointEncSliceVAProfileH264ConstrainedBaseline: VAEntrypointFEIVAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLPVAProfileHEVCMain : VAEntrypointVLDVAProfileHEVCMain : VAEntrypointEncSliceVAProfileHEVCMain : VAEntrypointFEIVAProfileHEVCMain : VAEntrypointEncSliceLPVAProfileHEVCMain10 : VAEntrypointVLDVAProfileHEVCMain10 : VAEntrypointEncSliceVAProfileHEVCMain10 : VAEntrypointEncSliceLPVAProfileVP9Profile0 : VAEntrypointVLDVAProfileVP9Profile1 : VAEntrypointVLDVAProfileVP9Profile2 : VAEntrypointVLDVAProfileVP9Profile3 : VAEntrypointVLDVAProfileHEVCMain12 : VAEntrypointVLDVAProfileHEVCMain12 : VAEntrypointEncSliceVAProfileHEVCMain422_10 : VAEntrypointVLDVAProfileHEVCMain422_10 : VAEntrypointEncSliceVAProfileHEVCMain422_12 : VAEntrypointVLDVAProfileHEVCMain422_12 : VAEntrypointEncSliceVAProfileHEVCMain444 : VAEntrypointVLDVAProfileHEVCMain444 : VAEntrypointEncSliceLPVAProfileHEVCMain444_10 : VAEntrypointVLDVAProfileHEVCMain444_10 : VAEntrypointEncSliceLPVAProfileHEVCMain444_12 : VAEntrypointVLDVAProfileHEVCSccMain : VAEntrypointVLDVAProfileHEVCSccMain : VAEntrypointEncSliceLPVAProfileHEVCSccMain10 : VAEntrypointVLDVAProfileHEVCSccMain10 : VAEntrypointEncSliceLPVAProfileHEVCSccMain444 : VAEntrypointVLDVAProfileHEVCSccMain444 : VAEntrypointEncSliceLPVAProfileHEVCSccMain444_10 : VAEntrypointVLDVAProfileHEVCSccMain444_10 : VAEntrypointEncSliceLP
4. Intel Media SDK源码编译(可选)
cd $WORKING_DIR
git clone https://github.com/Intel-Media-SDK/MediaSDK.gitcd MediaSDK
mkdir build && cd build
cmake ..
make
sudo make installexport LD_LIBRARY_PATH=/opt/intel/mediasdk/lib:$LD_LIBRARY_PATH
测试MSDK是否成功安装(可选操作)
$ cd /opt/intel/mediasdk/share/mfx/samples/
/opt/intel/mediasdk/share/mfx/samples$ ./sample_encode h264 -i /home/amov/output.yuv -w 1920 -h 1080 -vaapi
File output is disabled as -o option isn't specified
libva info: VA-API version 1.15.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /opt/intel/media-driver/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_15
libva info: va_openDriver() returns 0
Encoding Sample Version 20.2.0Input file format YUV420
Output video AVC
Source picture:Resolution 1920x1088Crop X,Y,W,H 0,0,1920,1080
Destination picture:Resolution 1920x1088Crop X,Y,W,H 0,0,1920,1080
Frame rate 30.00
Bit rate(Kbps) 3757
Gop size 256
Ref dist 4
Ref number 3
Idr Interval 0
Target usage balanced
Memory type vaapi
Media SDK impl hw
Media SDK version 1.35Processing startedProcessing finished
5. 使用ffmpeg测试intel-VAAPI硬件编码情况
运行该步操作需要提前安装带vaapi的ffmpeg。下面是在i7-1165G7测试的情况,系统是ubuntu 20.04,操作同一个视频文件,intel软编码的CPU使用率为479%,硬编码的CPU使用率为34.3%。此外,延时也非常低。