FFmpeg intel GPU解码加速
1. intel Media SDK提供接口调用GPU硬件
架构图如下:
各组件关系如上图所示。 i915 driver为内核自带。
2. 环境搭建
根据上图关系依次创建环境:
-组件- | - Repo- | -简述- |
---|---|---|
libdrm | apt install libdrm-dev (/dev/dri/render*) | 访问drm设备通用接口 |
GMMLib | https://github.com/intel/gmmlib | 图形内存管理库 |
VAAPI intel Driver | https://github.com/intel/media-driver | Video Acceleration API |
libVA API | https://github.com/intel/libva | 屏蔽底层异构,提供通用va |
libva-utils | https://github.com/intel/libva-utils.git | libva api 的实例和工具 |
Media SDK Library | https://github.com/Intel-Media-SDK/MediaSDK.git | Medis SDK 广泛覆盖英特尔硬件平台,包括了优化图形硬件例 程的主要功能,提供高效可行方法利用目标平台硬件功能,如果没有独立图形硬件加速平台,也可以使用 |
3. 使用docker 搭建环境or主机环境
例如:docker run --privileged=true -ti ubuntu:18.04 bash
#1. 基本环境及工具安装
apt update && apt install make cmake pkg-config libtool autoconf git
#2. 编译gmmlib
git clone https://github.com/intel/gmmlib.git
cd gmmlib && mkdir -p build && cd build && cmake .. && make && make install
#3. 安装 libdrm 库,通用访问硬件接口库
apt install libdrm-dev
#4. 编译libVA
git clone https://github.com/intel/libva.git
cd libva && ./autogen.sh && make && make install
#5. 编译VAAPI intel Driver
git clone https://github.com/intel/media-driver.git
cd media-driver && mkdir -p build && cd build && make && make install
#6 编译libva-tools
git clone https://github.com/intel/libva-utils.git
cd libva-utils && ./autogen.sh && make && make install
### 测试命令,vainfo h264encode,如果找不到,将/usr/local/lib/添加ldconf或者LD_LIBRARY_PATH
###########################################################################
# 当前阶段可以通用libva 来进行调用硬件做编解码,
# 默认头文件位置: /usr/local/include/va/
# 库位置: /usr/local/lib/
# 例子可以参考 libva-utils decode/encode目录
###########################################################################
#7. 编译 media
git clone https://github.com/Intel-Media-SDK/MediaSDK.git
cd MediaSDK && mkdir -p build && cd build && make && make install
#默认安装位置/opt/intel/mediasdk/
访问intel GPU硬件资源环境搭建完成, 下面编译ffmpeg, 利用ffmpeg 使用intel gpu硬件资源
# 下载ffmpeg
git clone https://github.com/FFmpeg/FFmpeg.git #测试版本release v4.2
# 编译
## 找到libmfx库位置及及并头文件
export PKG_CONFIG_PATH=/opt/intel/mediasdk/lib/pkgconfig:$PKG_CONFIG_PATH
## 主要使能vaapi libmfx选项
./configure --prefix=/root/install/ --enable-vaapi --enable-libmfx --disable-lzma --disable-zlib --disable-sdl2 --disable-ffplay --disable-avdevice --enable-shared --extra-cflags=" -fPIC " --disable-x86asm
make && make install
4. 测试解码器
硬件解码 1. h264: h264_qsv 2. h265: hevc_qsv
./ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -vf hwdownload,format=nv12 out.yuv
软解
./ffmpeg -i input.mp4 out.yuv
仅仅为了记录
libva.so 依赖 iHD_drv_video.so
libva源码中对iHD_drv_video.so作了配置, 根据LIBVA_DRIVERS_PATH 路径寻找
如果你想要自动移动整套环境的话,改变LIBVA_DRVIERS_PATH为LD_LIBRARY_PATH,这样方便,因为我需要复制多台机器,故需要整理环境,移到任何一个环境可以直接使用。
(曾经遇到过 Failed to initialise VAAPI connection: -1 (unknown libva error). 是LIBVA_DRVIERS_PATH没有设置的导致的)
整套环境:
dri: iHD_drv_video.so
drm: libdrm.so
va: libigdgmm.so libigfxcmrt.so libva-drm.so libva.so
mfx: libmfx.so libmfxhw64.so libmfx_h264...等跟编解码相关的库