Ubuntu18上安装QSV+FFMPEG环境

  • Intel Media SDK相关下载
  • 编译前的准备
  • 安装libva
  • 安装libva-utils
  • 安装gmmlib
  • 安装media-driver
  • 安装Media SDK
  • 安装FFMPEG
  • 参考文章


由于项目需要,需要在一块I7-8850H上进行H264解码成YUV并显示的功能。由于系统是Ubuntu18,故打算使用QT+FFMPEG来实现。先前的一路软解发现CPU占用率去到了20%以上,我们需要同时进行四路解码,这个占用率是无法接受的,故打算使用FFMPEG进行硬解。由于只有I7的集显,所以只能使用QSV。现在记录下安装方法。

Intel Media SDK相关下载

sdk可以自行去官网下载:官网地址 这里我使用最新的21.2.3版本 下载地址

Java ffmpeg cpu 过高_硬件


这里需要把除了opencl的依赖都下载下来Media SDK and Samples、Driver、Gmmlib、libva、libva-utils都要,点击对应的连接进去下载,有些可以下载编译好的,我这里全都选择下载源码自己编译。记得一定要按照他给的链接点进去下载,这些库的版本是会有影响的!

Java ffmpeg cpu 过高_linux_02

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

2、把下载的源码全都解压出来

Java ffmpeg cpu 过高_硬件_03

安装libva

$ 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   #让环境变量生效

安装libva-utils

$ 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

安装gmmlib

$ 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              #安装

安装media-driver

$ 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的相关信息

如果出现以下的信息,则说明前面的安装都成功了

Java ffmpeg cpu 过高_linux_04

安装Media SDK

$ 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   #让环境变量生效

安装FFMPEG

直接从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这一整套就安装完成了。

参考文章

https://zhuanlan.zhihu.com/p/372361709 

https://zhuanlan.zhihu.com/p/62246545