由于项目需要,需要在一块I7-8850H上进行H264解码成YUV并显示的功能。由于系统是Ubuntu18,故打算使用QT+FFMPEG来实现。先前的一路软解发现CPU占用率去到了20%以上,我们需要同时进行四路解码,这个占用率是无法接受的,故打算使用FFMPEG进行硬解。由于只有I7的集显,所以只能使用QSV。现在记录下安装方法。(实现代码在Ubuntu18使用FFMPEG+QT实现QSV硬解)
sdk可以自行去官网下载:官网地址
这里我使用最新的21.2.3版本 下载地址
这里需要把除了opencl的依赖都下载下来Media SDK and Samples、Driver、Gmmlib、libva、libva-utils都要,点击对应的连接进去下载,有些可以下载编译好的,我这里全都选择下载源码自己编译。记得一定要按照他给的链接点进去下载,这些库的版本是会有影响的!
QSV还要求装OPENCL,openCL的依赖可以点进去他给的链接里,里面有安装教程,我这里就不说了。
1、编译需要一些工具,都可以直接apt安装的。
$ sudo apt-get install -y git # 使用git需要
$ sudo apt-get install -y make # make编译源码很多地方需要
$ sudo apt-get install -y dh-autoreconf # autogen编译源码时需要
$ sudo apt-get install pkg-config # 编译libva时需要
$ apt-get install -y libncurses5-dev libpthread-stubs0-dev libpciaccess-dev libxvmc-dev xutils-dev libsdl2-dev libxcb-shm0-dev
$ cd libva-2.12.0/ #进入libva的目录下
$ ./autogen.sh #使用它自带的配置文件,这里不加额外的参数
$ make -j12 #make I7是12线程的 所以-j12
$ sudo make install #安装 这台设备默认是装到了/usr/lib/x86_64-linux-gnu
$ sudo gedit ~/.bashrc #打开配置文件
把以下两句放到末尾并保存关闭 就是配置库的路径 根据实际安装的位置修改 我的是装到了/usr/lib/x86_64-linux-gnu
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH
$ sudo ldconfig #让环境变量生效
$ cd .. #退回上层目录
$ cd libva-utils-2.12.0/ #进入libva-utils的源码目录
$ ./autogen.sh #使用它自带的配置文件,这里不加额外的参数
$ make -j12 #make I7是12线程的 所以-j12
$ sudo make install #安装 这台设备默认是装到了/usr/lib/x86_64-linux-gnu
$ cd .. #退回上层目录
$ cd gmmlib-intel-gmmlib-21.2.1/ #进入libgmm的源码目录
$ mkdir build #创建一个build目录用来编译
$ cd build/ #进去build目录
$ cmake .. #cmake .. 这个是用cmake编译的
$ make -j12 #make I7是12线程的 所以-j12
$ sudo make install #安装
$ cd .. #退回上层目录
$ cd media-driver-intel-media-21.2.3/ #进入media-driver-intel-media-21.2.3
$ mkdir build #创建一个build目录用来编译
$ cd build/ #进去build目录
$ cmake .. #cmake .. 这个是用cmake编译的
$ make -j12 #make I7是12线程的 所以-j12
$ sudo make install #安装 这台设备默认是装到了/usr/local/
$ sudo gedit ~/.bashrc #打开配置文件
把以下两句放到末尾并保存关闭 就是配置库的路径 根据实际安装的位置修改 我的是装到了/usr/local/
export LIBVA_DRIVER_NAME=iHD
export LIBVA_DRIVERS_PATH=/usr/local/lib/dri
$ sudo ldconfig #让环境变量生效
这里可以用vainfo验证下是否安装成功
$ vainfo #查看下aapi的相关信息
$ cd .. #退回上层目录
$ cd MediaSDK-intel-mediasdk-21.2.3/ #进入/MediaSDK-intel-mediasdk-21.2.3
$ mkdir build #创建一个build目录用来编译
$ cd build/ #进去build目录
$ cmake .. #cmake .. 这个是用cmake编译的
$ make -j12 #make I7是12线程的 所以-j12
$ sudo make install #安装 这台设备默认是装到了/opt/
$ sudo gedit ~/.bashrc #打开配置文件
把以下三句放到末尾并保存关闭 就是配置库的路径 根据实际安装的位置修改 我的是装到了/opt/intel/mediasdk/lib/
export LD_LIBRARY_PATH=/opt/intel/mediasdk/lib:$LD_LIBRARY_PATH
export MFX_HOME=/opt/intel/mediasdk/lib/pkgconfig
export PKG_CONFIG_PATH=/opt/intel/mediasdk/lib/pkgconfig:$PKG_CONFIG_PATH
$ sudo ldconfig #让环境变量生效
直接从github上面把源码拉下来(这个过程比较慢)
git clone https://github.com/ffmpeg/ffmpeg
拉下来之后直接编译
$ cd .. #退回上层目录
$ cd ffmpeg #进入ffmeg的目录
$ ./configure --arch=x86_64 --disable-yasm --enable-vaapi --enable-libmfx #配置下参数
$ make -j12 #make
$ sudo make install #安装 在/usr/local里
$ sudo gedit ~/.bashrc #打开配置文件
把以下这一句放到末尾并保存关闭 就是配置库的路径 根据实际安装的位置修改 我的是装到了/usr/local/
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
$ sudo ldconfig #让环境变量生效
安装完成之后可以用以下命令命令测试下是否可用
ffmpeg -vcodec h264_qsv -i h264文件 YUV输出文件
如果没有报错,这次解码,那么ffmpeg这一整套就安装完成了。
1、https://blog.csdn.net/haiyangyunbao813/article/details/107829583
2、https://zhuanlan.zhihu.com/p/372361709
3、https://zhuanlan.zhihu.com/p/62246545