ffmpeg Intel硬件加速总结
0. 概述
FFmpeg可通过Intel的GPU进行加速,加速器的名称是Intel Quick Sync Video,简称qsv,支持该加速器的Intel处理器的型号是带有Intel Iris graphics GPU或 HD graphics GPU的CPU,目前几乎所有Core i系列的CPU和小部分Xeon系列的CPU(E3-1285v5)有GPU,市面上常见的高密度媒体处理服务器便是基于此CPU+GPU的方式实现多路媒体处理计算任务,需要注意的是作为SoC组成部分的GPU是不能虚拟化的,无法通过Xen、Ctrix、KVM或VMware利用GPU计算资源。
1. 安装驱动与SDK
1.1 前期准备
(1). 添加用户组
usermod -a -G video root
(2). 查看集成显核情况
lspci -nn -s 0:02.0
如果回车显示
00:02.0 VGA compatible controller [0300]: Intel Corporation Sky Lake Integrated Graphics [8086:193b] (rev 09)
- 1
说明集成显核存在,其中193b是graphics device ID,如果看不到此信息的话需要更改BIOS的设置
1.2 SDK安装
官方提供的SDK安装方式分为CentOS7.2 Gold安装(即官方针对该版本操作系统写好安装脚本的简易安装)以及Generic安装(需要手动进行),由于本文使用Ubuntu16.04操作系统,故用第二种方式
SDK安装又称为user-mode driver(UMD)安装
(1). 首先将mediaserverstudio/SDK/Generic/intel-linux-media-ocl-generic/目录下的etc、opt、usr文件夹分别拷贝至系统的/etc、/opt、/usr目录下
(2). 确定/usr目录下此前没有其他版本的libdrm和libva库,否则应删除
(3). 安装libxcb1-dev(提供X window protocol access)和libpciaccess-dev库(提供PCI access),这两个库均可直接通过apt-get install安装,在安装之前建议先通过apt-get build-dep安装它们的依赖库
(4). 进入/opt/intel/mediasdk/opensource/libdrm/2.4.66-55964/libdrm-2.4.66目录下安装libdrm库。DRM即direct rendering manager,可以在linux系统下提供对图形硬件的访问。安装步骤很简单,./configure、make、make install三步即可
(5). 进入/opt/intel/mediasdk/opensource/libva/1.67.0.pre1-55964/libva-1.67.0.pre1目录下安装libva库。VA即Video Accerleration,是一个开源的提供硬件编码的模块。安装步骤很简单,./configure、make、make install三步即可
(6). 在/etc/environment文件添加中添加下列语句
LD_LIBRARY_PATH=/usr/local/lib;/usr/lib64
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVERS_PATH=/opt/intel/mediasdk/lib64
1.3 驱动安装
驱动安装又名kernel-mode driver(KMD)安装
(1). 在www.kernel.org下载linux kernel 4.4.66版本,将/opt/intel/mediasdk/opensource/patches/kmd/4.4.66/intel-kernel-patchs.tar.bz2拷贝到解压得到的linux-4.4.66目录下,通过下面的命令为linux kernel加入补丁
for i in intel-kernel-patches/*.patch; do patch -p1 < $i; done
(2). 使用下面的命令build kernel
make olddefconfig
make -j 8
make modules_install
make install
重启电脑
检测方法:lsmod | grep ‘i915’
如果显示
i915 1277952 6
i2c_algo_bit 16384 1 i915
drm_kms_helper 135168 1 i915
drm 356352 7 i915,drm_kms_helper
video 40960 1 i915
- 1
- 2
- 3
- 4
- 5
说明驱动安装成功
1.4 HEVC插件安装
在mediaserverstudioprofessional/hevcevaluation目录下,直接运行install.sh脚本按提示安装即可
2. Sample测试
2.1 Sample编译
进入sample目录
perl build.pl –cmake=intel64.make.debug –build
如果出现如下问题:
Not searching for unused variables given on the command line.
-- Intel(R) Media SDK /opt/intel/mediasdk/include, /opt/intel/mediasdk/lib/lin_x64/libmfx.a was found here /opt/intel/mediasdk -- Intel(R) Media SDK /opt/intel/mediasdk/lib/lin_x64 will be used -- Checking for module 'libva-x11>=0.33' -- CMake Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:367 (message): A required package was not found Call Stack (most recent call first): /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:532 (_pkg_check_modules_internal) /workspace/ffmpeg_linux/MediaServerStudioProfessionalEvaluation2017/MediaSamples_Linux_2017/builder/FindPackages.cmake:387 (pkg_check_modules) CMakeLists.txt:24 (include) -- Configuring incomplete, errors occurred! See also "/workspace/ffmpeg_linux/MediaServerStudioProfessionalEvaluation2017/MediaSamples_Linux_2017/samples/__cmake/intel64.make.debug/CMakeFiles/CMakeOutput.log". make: *** 没有指明目标并且找不到 makefile。 停止。 [ intel64.make.debug State: FAIL ]
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
则需要
apt-get install pciaccess
apt-get install libva-x11-1
apt-get install libx11*
2.2 Sample测试
可以用2.1自己编译的Sample,在MediaServerStudioProfessionalEvaluation2017/MediaSamples_Linux_2017/samples/_bin/x64下
也可以用安装时带的Sample,在/opt/intel/mediasdk/samples
(1). 例子1
./sample_encode h265 -i BQTerrace_1920x1080_60.yuv -o 1.265 -w 1920 -h 1080
如果出现如下问题:
plugin_loader.h :166 [ERROR] Failed to load plugin from GUID, sts=-9: { 0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47 } (Intel (R) Media SDK HW plugin for HEVC ENCODE) Default plugin cannot be loaded (possibly you have to define plugin explicitly) Return on error: error code -3, /home/lab_msdk/buildAgentDir/buildAgent_MediaSDK4/git/mdp_msdk-samples/samples/sample_encode/src/pipeline_encode.cpp 1127 Return on error: error code -3, /home/lab_msdk/buildAgentDir/buildAgent_MediaSDK4/git/mdp_msdk-samples/samples/sample_encode/src/sample_encode.cpp 859 Frame number: 0
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
hevc需要加-p参数
打开/opt/intel/mediasdk/plugins/plugins.cfg看到
[HEVC_Decoder_15dd936825ad475ea34e35f3f54217a6]
GUID = 15dd936825ad475ea34e35f3f54217a6
PluginVersion = 1 APIVersion = 275 Path = /opt/intel/mediasdk/plugins/libmfx_hevcd_sw64.so Type = 1 CodecID = HEVC Default = 0 [HEVC_Encoder_e5400a06c74d41f5b12d430bbaa23d0b] GUID = e5400a06c74d41f5b12d430bbaa23d0b PluginVersion = 1 APIVersion = 275 Path = /opt/intel/mediasdk/plugins/libmfx_hevce_gacc64.so Type = 2 CodecID = HEVC Default = 0 [HEVC_Encoder_2fca99749fdb49aeb121a5b63ef568f7] GUID = 2fca99749fdb49aeb121a5b63ef568f7 PluginVersion = 1 APIVersion = 275 Path = /opt/intel/mediasdk/plugins/libmfx_hevce_sw64.so Type = 2 CodecID = HEVC Default = 0/2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
里面包含GUID
./sample_encode h264 -i BQTerrace_1920x1080_60.yuv -o 1.264 -w 1920 -h 1080 -f 60
- 1
运行正常,并显示
`libva info: VA-API version 0.99.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD' libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so libva info: Found init function __vaDriverInit_0_32 libva info: va_openDriver() returns 0 Encoding Sample Version 7.0.16053497 Input file format YUV420 Output video AVC Source picture: Resolution 1920x1088 Crop X,Y,W,H 0,0,1920,1080 Destination picture: Resolution 1920x1088 Crop X,Y,W,H 0,0,1920,1080 Frame rate 60.00 Bit rate(Kbps) 4703 Gop size 0 Ref dist 0 Ref number 1 Idr Interval 0 Target usage balanced Memory type system Media SDK impl hw Media SDK version 1.19 Processing started Frame number: 601
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
(2). 例子2
./sample_multi_transcode -i::h264 ../content/test_stream.264 -o::h264 out.h264 -hw -la
- 1
显示
Multi Transcoding Sample Version 7.0.16053497libva info: VA-API version 0.99.0 libva info: va_getDriverName() returns 0 libva info: User requested driver 'iHD' libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so libva info: Found init function __vaDriverInit_0_32 libva info: va_openDriver() returns 0 Pipeline surfaces number (DecPool): 59 MFX HARDWARE Session 0 API ver 1.19 parameters: Input video: AVC Output video: AVC Session 0 was NOT joined with other sessions Transcoding started .. Transcoding finished Common transcoding time is 0.19 sec MFX session 0 transcoding PASSED: Processing time: 0.19 sec Number of processed frames: 101 The test PASSED
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
该例子运行的正确,表明:
1. iHD驱动安装正确
2. libva路径正确
./sample_multi_transcode -i::h264 ../content/test_stream.264 -o::h265 out.h265 -hw -la
- 1
如果出现问题:
Multi Transcoding Sample Version 7.0.16053497libva info: VA-API version 0.99.0 libva info: va_getDriverName() returns 0 libva info: User requested driver 'iHD' libva info: Trying to open /opt/intel/mediasdk/lib64/iHD_drv_video.so libva info: Found init function __vaDriverInit_0_32 libva info: va_openDriver() returns 0 plugin_loader.h :166 [ERROR] Failed to load plugin from GUID, sts=-9: { 0x6f, 0xad, 0xc7, 0x91, 0xa0, 0xc2, 0xeb, 0x47, 0x9a, 0xb6, 0xdc, 0xd5, 0xea, 0x9d, 0xa3, 0x47 } (Intel (R) Media SDK HW plugin for HEVC ENCODE) Default plugin cannot be loaded (possibly you have to define plugin explicitly) Return on error: error code -3, /home/lab_msdk/buildAgentDir/buildAgent_MediaSDK4/git/mdp_msdk-samples/samples/sample_multi_transcode/src/pipeline_transcode.cpp392 Return on error: error code -3, /home/lab_msdk/buildAgentDir/buildAgent_MediaSDK4/git/mdp_msdk-samples/samples/sample_multi_transcode/src/pipeline_transcode.cpp2886 Return on error: error code -3, /home/lab_msdk/buildAgentDir/buildAgent_MediaSDK4/git/mdp_msdk-samples/samples/sample_multi_transcode/src/sample_multi_transcode.cpp 307
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
则说明本机存在多个版本的libdrm和libva
解决方法
将/usr中的libdrm*和libva*都删除
find /usr -name “libdrm*” | xargs sudo rm –rf
find /usr -name “libva*” | xargs sudo rm –rf
apt-get install libva-*
apt-get install安装在了这个目录下:
/usr/lib/x86_64-linux-gnu/
plugin一直没有正常安装成功
3. ffmpeg结合
3.1 ffmpeg编译
3.1.1 前期工作
(1).
/opt/intel/mediasdk/include中新建文件夹mfx,并把所有.h拷贝到该文件夹中
(2).
mkdir -p /opt/intel/mediasdk/lib64/pkgconfig
gedit /opt/intel/mediasdk/lib64/pkgconfig/libmfx.pc
写了如下内容:
prefix=/opt/intel/mediasdk
exec_prefix=${prefix}
libdir=${prefix}/lib/lin_x64
includedir=${prefix}/includeName: libmfxDescription: Intel Media Server Studio SDK
Version: 16.4.2 Libs: -L${libdir} -lmfx -lva -lstdc++ -ldl -lva-drm -ldrm Cflags: -I${includedir} -I/usr/include/libdrm
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
并复制/usr/lib64/pkgconfig/
在bashrc中添加
export MFX_HOME=/opt/intel/mediasdk/
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig/
- 1
- 2
3.1.2 configure命令
./configure \--enable-version3 \--enable-libvpx \--enable-libfdk-aac \--enable-libmp3lame \--enable-libx264 \ --enable-libmfx \ --extra-cflags="-I/opt/intel/mediasdk/include" \ --extra-ldflags="-L/opt/intel/mediasdk/lib/lin_x64" \ --extra-libs=-lmfx \ --extra-libs=-ldl \ --enable-librtmp \ --enable-shared \ --enable-gpl \ --enable-postproc \ --enable-nonfree \ --enable-avfilter \ --enable-pthreads
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
如果出现如下错误
ERROR: libmfx not found using pkg-configIf you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. Include the log file "config.log" produced by configure as this will help solve the problem. config.log显示: Package libmfx was not found in the pkg-config search path. Perhaps you should add the directory containing `libmfx.pc' to the PKG_CONFIG_PATH environment variable No package 'libmfx' found ERROR: libmfx not found using pkg-config
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
则说明没做前期工作!!!
编译时可以 | tee config.out,然后grep ‘qsv’ config.out来检查是否有qsv
3.1.2 make
如果出现编译错误
LD ffmpeg_g
libavcodec/libavcodec.so:对‘MFXVideoUSER_Load’未定义的引用
collect2: error: ld returned 1 exit status
Makefile:131: recipe for target 'ffmpeg_g' failed make: *** [ffmpeg_g] Error 1
- 1
- 2
- 3
- 4
- 5
说明configure没有加如下两行
--extra-libs=-lmfx \
--extra-libs=-ldl \
- 1
- 2
最终编译通过,运行 ffmpeg -codecs | grep ‘qsv’,如果得到以下显示
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv ) (encoders: h264_qsv h264_vaapi )
- 1
说明编译成功!
3.2 ffmpeg测试
ffmpeg -codecs|grep qsv
显示
DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_qsv ) (encoders: libx264 libx264rgb h264_qsv h264_vaapi ) DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_qsv ) (encoders: hevc_qsv hevc_vaapi ) DEV.L. mpeg2video MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_qsv ) (encoders: mpeg2video mpeg2_qsv ) D.V.L. vc1 SMPTE VC-1 (decoders: vc1 vc1_qsv )
- 1
- 2
- 3
- 4
3.3 编解码器使用方法
265编码测试
(1). ffmpeg -s 1920x1080 -pix_fmt yuv420p -i BQTerrace_1920x1080_60.yuv -vcodec hevc_qsv -load_plugins e5400a06c74d41f5b12d430bbaa23d0b -r 60 2_60.265
(2). ffmpeg -s 1920x1080 -pix_fmt yuv420p -i BQTerrace_1920x1080_60.yuv -vcodec hevc_qsv -load_plugins e5400a06c74d41f5b12d430bbaa23d0b -r 30 2_30.265
264编码测试
(3). ffmpeg -s 1920x1080 -pix_fmt yuv420p -i BQTerrace_1920x1080_60.yuv -vcodec h264_qsv -r 60 2_60.264
(4). ffmpeg -s 1920x1080 -pix_fmt yuv420p -i BQTerrace_1920x1080_60.yuv -vcodec h264_qsv -r 30 2_30.264
264转265
(5). ffmpeg -i 1_60.264 -vcodec hevc_qsv -load_plugins e5400a06c74d41f5b12d430bbaa23d0b -r 60 2_60_264to265.265
(6). ffmpeg -i 1_30.264 -vcodec hevc_qsv -load_plugins e5400a06c74d41f5b12d430bbaa23d0b -r 30 2_30_264to265.265
265转264
(7). ffmpeg -i 1_60.265 -vcodec h264_qsv -r 60 2_60_265to264.264
(8). ffmpeg -i 1_30.265 -vcodec h264_qsv -r 30 2_30_265to264.264
3.4 程序开发使用方法
av_find_encoder_by_name(“h264_qsv”);
av_find_encoder_by_name(“h265_qsv”);
4. 辅助工具
(1). apt-get install intel-gpu-tools
intel_gpu_top 类似与top
intel_gpu_abrt
intel_gpu_time
(2).
/opt/intel/mediasdk/tools/metrics_monitor/sample
./run.sh
5. 实测结果
稍后补充
6. 源码分析
稍后补充
ffmpeg Intel硬件加速总结相关推荐
- ffmpeg使用硬件加速hwaccel、cuvid、h264_cuvid、h264_nvenc
文章目录 ffmpeg支持硬件加速的原理 所用环境说明 ffmpeg使用硬件加速 安装nvidia驱动 安装cuda 加入header 安装pkgconfig 开始配置 在ffmpeg中看如何使用硬件 ...
- Intel硬件加速 VS CUDA完胜 视频转码感受
对比试用平台介绍 在体验了酷睿 I5 2300 在3D游戏和多任务.高清播放等方面的突出性能后,今天我利用空闲时间针对酷睿 I5 2300在高清转码方面上与本人的旧平台上对比了一下.,其结果也让人感到 ...
- 使用Lucid Virtu在有独立显卡的情况下使用Intel硬件加速H.264编码
在硬编码领域,大家都知道CUDA技术对于H.264视频编码速度的提升.然而实际上常见的高清H.264视频压缩都不是用CUDA技术进行硬编码,而是用传统的x264进行软编码,因为通过CUDA硬编码的视频 ...
- FFMPEG NVIDIA硬件加速总结
目录 1.NVDIA概述 2.FFmpeg集成到GPU 3.FFmpeg uses Video Codec SDK 4.ffmpeg对NVIDIA GPU的编译步骤 4.1configure命令 4. ...
- ffmpeg Nvidia硬件加速总结
0. 概述 FFmpeg可通过Nvidia的GPU进行加速,其中高层接口是通过Video Codec SDK来实现GPU资源的调用.Video Codec SDK包含完整的的高性能工具.源码及文档,支 ...
- FFmpeg视频解码硬件加速
<音视频应用开发系列文章目录> ffmpeg支持的硬件解码器 enum AVHWDeviceType {AV_HWDEVICE_TYPE_NONE,AV_HWDEVICE_TYPE_VDP ...
- android 模拟器使用intel硬件加速
前言: 大家现在开发使用的Android 模拟器模拟的是 ARM 的体系结构(arm-eabi),因此模拟器并不是运行在x86上而是模拟的ARM,所以我们调试程序的时候经常感觉到非常慢,大 ...
- ffmpeg gpu硬件加速
整理下自己百度以及实验成功的结果 0. 成功截图. 一开始, 我用cpu去跑, 速度大约在 3-5 s 这样子. 用gpu去跑,速度就到15-20 这个样子. 确实快了很多. 1. 环境安装及检查. ...
- FFmpeg在Intel GPU上的硬件加速与优化
英特尔提供了一套基于VA-API/Media SDK的硬件加速方案,通过在FFmpeg中集成Intel GPU的媒体硬件加速能力,为用户提供更多的收益.本文来自英特尔资深软件开发工程师赵军在LiveV ...
最新文章
- Linux那些事儿 之 戏说USB(6)好戏开始了
- nodejs回调函数理解
- 推荐三款scrum看板协作工具
- 过滤当前主机的IPV4地址
- python pytest 前置后置
- Portal for ArcGIS 资源承载数据类型
- javascript 校验 非空_前端(js+JQuery非空校验)
- 计算机维修报价,求一张电脑维护维修价格表
- 大学必备C语言基础知识(一)
- 【已解决】Activity MainActivity has leaked window PhoneWindow$DecorView@ that was originally added here
- HGDB 兼容 Oracle 中 merge into using(APP)
- 快速在PPT里插入多张图片
- 智能内存整理 [免费绿色] 3.0.0.0
- (三)《数字电子技术基础》——码制
- vcs中一个simv的诞生过程
- Nacos下载和安装-windows版本
- VLC更改设置,播放本地H264和H265流媒体文件和播放帧率
- 项目管理之三点估算(正态分布)
- 科普下域名续费中的宽限期和赎回期
- 华为手机微信分身已下载文件如何拷贝,导出已下载文件
热门文章
- 软件测试实习生 带人计划 Plan for Training Inten
- 常用字写法(粤语)--(1)
- qpieseries显示百分比_为饼图添加百分比显示效果
- 以企查查为例详解如何用爬虫采集企业信息及电话邮箱数据
- -XX:+PrintHeapAtGC参数使用了解
- 淘宝特价版推出省心版,为什么难“钉“老人心?
- 小红书报告:2023美妆个护白皮书解读
- Python决策树鸢尾花类别分类
- 2015年4月9号和4月11号
- 【操作系统】CSAPP学习笔记