英特尔 QSV 在 FFMPEG 中的使用(Linux)

转载 2015年11月16日 14:23:39

Intel Media SDK

现在 Intel 不再发布单独的 Intel Media SDK, 这个组件在 Linux 平台下集成在 Intel Media Server Studio 中,后文简称 MMS

目前的 MMS 版本推荐的安装平台只有一个 CentOSSUSE12 在当前版本中也算是一个推荐平台)。其他平台的安装比较复杂,官方也不太推荐使用。后文的介绍是基于 CentOS 操作系统的。

如何安装 MMS

首先,你需要在 Intel Developer Zone 下载最新的 MMS 版本,其中的 Community 版本是免费的, MMS 的安装主要分三个步骤。

在解压出来的的文件夹下面有一个 SDK2015Production* 目录,切换到这个目录下面之后,有一个 CentOS 目录。这个目录下面有一个intel_scripts_centos*压缩包,解压这个压缩包之后可以得到下面三个脚本:

-build_kernel_rpm_CentOS.sh
-install_sdk_UMD_CentOS.sh
-uninstall_sdk_UMD_CentOS.sh

安装需要用的是前面两个脚本。

1. 安卓用户空间驱动(user-mode driver – UMD)

下面的命令需要使用超级用户权限:

./install_sdk_UMD_CentOS.sh

mkdir /MSS

chown {普通用户名}:{普通组名} /MSS

2. 编译内核空间的驱动包

下面的命令使用普通用户权限执行:

cp build_kernel_rpm_CentOS.sh /MSS

cd /MSS

./build_kernel_rpm*.sh

3. 安装内核空间的驱动

下面的命令使用超级用户权限执行:

cd /MSS/rpmbuild/RPMS/x86_64

rpm -Uvh kernel-3.10.*.rpm

reboot

判断是否已经成功的编译内核模块驱动

重启系统之后执行如下命令:

lsmod | grep 'i915'

得到的类似如下的结果:

i915                837369 4
drm_kms_helper      44256 1 i915
drm                 294746 3 i915,drm_kms_helper
i2c_algo_bit        13509 1 i915
intel_gtt           19747 1 i915
i2c_core            40683 5
i2c_i801,i915,drm_kms_helper,drm,i2c_algo_bit
video               19785 1 i915
button              13953 1 i915

如何在 FFMPEG 中编译 intel qsv 硬件编码器

FFMPEG 中使用 libmfx 实现 intel qsv 的硬件编码器,如果想要编译它的硬件编码器,所以如果想要编译这个硬件编码器,你需要在加入如下的配置选项:

./configure --enable-libmfx \
            --enable-encoder=h264_qsv \
            --enable-decoder=h264_qsv \
            ...

libmfx can not found using pkg-config

libmfx.pc

编译中可能会报出下面的错误: libmfx can not found using pkg-config,这个错误可能是不同的原因导致,你需要查看 ffmpeg 根目录下的config.log 文件。

如果这个文件中报错说 pkg-config 无法找到 libmfx 这个库,那是因为 MMS 的默认安装没有提供 libmfx.pc 文件,你需要在自己创建这个文件:

sudo mkdir -p /opt/intel/mediasdk/pkgconfig

vim /opt/intel/mediasdk/lib64/pkgconfig/libmfx.pc

在文件中写入如下内容:

prefix=/opt/intel/mediasdk
exec_prefix=${prefix}
libdir=${exec_prefix}/lib64
includedir=${exec_prefix}/include

Name: libmfxhw64

Description: Intel Media SDK dispatcher.
Version: 2015r6
Libs: -L${libdir} -lmfxhw64
Cflags: -I${includedir}

注意这个地方引用的是 libmfxhw64 库,因为测试的是 64 位平台。

当然你可以可以选择在 /usr/lib64/pkgconfig/ 下面创建 libmfx.pc 文件。

mfx/mfxvideo.h

同样是 libmfx can not found using pkg-config 这个命令,也可能是头文件的错误,在 config.log 中会报错说无法找到 mfx/mfxvideo.h 这个文件。

在安装完 MMS 之后,在 /opt/intel/mediasdk/include/ 目录下面会有mfxvideo.h 这个文件,但是在 FFMPEG 中,引用的是 mfx/mfxvideo.h 这个头文件,因此报错,解决的方式是,在 /opt/intel/mediasdk/include 这个目录下面新建目录 mfx,然后吧 include 的头文件拷贝一份到 mfx 目录下。

通过上面这种方式可以修正 mfx/mfxvideo.h 无法找到的错误。

链接 FFMPEG 时的错误

在链接 ffmpeg 的时候还是有可能会出现 MFXxxx undefinded reference 的错误,这时候你需要让你的程序链接到 lmfxhw64 这个库。最简单的方式是,在/usr/lib64/ 中建立一个 libmfxhw64 的软连接

ln -s /opt/intel/mediasdk/lib64/libmfxhw64.so /usr/lib64/libmfxhw64.so

然后在编译自己的程序的时候加入 -lmfxhw64 选项。

在 FFMPEG 中使用 qsv 编码器

qsv 的编码器在 FFMPEG 中有 h264 和 h265 两种,你可以通过下面的代码找到这个编码器。

av_find_encoder_by_name("h264_qsv");

此外,通过 qsvenc_h264.c 这个源文件,我们可以看到它支持 QSV 和 NV12两种格式,但是 QSV 这个格式好像无法正常的使用,你需要把编码的pfx_fmt设置成 NV12

通过命令行来使用ffmpeg的qsv进行h624编码

之前就已经听说过ffmpeg是一个功能非常强大的音视频处理开源软件,不过一直都没有去认真地学习使用和开发,直到最近项目上要使用到intel的qsv技术来进行视频的硬件加速编码,才“被迫”去主动学习ff...
  • BGY_Bluesky
  • BGY_Bluesky
  • 2016-05-01 15:27:25
  • 4399

ffmpeg支持的硬解码接口

GPU可以支持视频解码,而且在ffmpeg中也提供了解码的接口,一个是NVIDIA的VDPAU,一个是intel的VAAPI。 1、首先安装最新的Nvidia显卡驱动 安装后一般会在/usr/li...
  • ljh081231
  • ljh081231
  • 2016-06-28 11:04:02
  • 14271

英特尔 QSV 在 FFMPEG 中的使用(Windows)

INDE 在 Windows 下通常使用 INDE 中的 Intel Media SDK 而不是 MMS,因为后者只在 Linux 下和 Windows Server 下可用。 I...
  • ww506772362
  • ww506772362
  • 2015-11-16 14:21:41
  • 5062

Windows/linux版本中QSV 在 FFMPEG 中的使用教程

Windows/linux版本中QSV 在 FFMPEG 中的使用教程
  • forfuture3513
  • forfuture3513
  • 2016-11-12 18:40:40
  • 1413

FFmpeg 使用HEVC_QSV编码时仅发送一次PPS问题的解决方法

使用最新版本的(3.2.1)的FFmpeg进行HEVC_QSV编码的时候,只会在开始的时候发送一次PPS,在之后的编码过程中都不在发送PPS,这导致了需要播流的播放器需先打开,再启动FFmpeg进行推...
  • StanleyWm_
  • StanleyWm_
  • 2017-03-19 08:22:48
  • 1156

ffmpeg Intel硬件加速总结

ffmpeg Intel硬件加速总结
  • LeoChen1983
  • LeoChen1983
  • 2017-05-25 19:45:28
  • 4257

英特尔 QSV 在 FFMPEG 中的使用(Windows)

http://blog.csdn.net/ww506772362/article/details/49865403
  • wishfly
  • wishfly
  • 2016-07-08 18:28:29
  • 1251

可以通过ffmpeg设置的Intel Qsv参数

QSV参数 "async_depth","Maximumprocessingparallelism" "avbr_accuracy", "AccuracyoftheAVBRratecontrol...
  • NB_vol_1
  • NB_vol_1
  • 2017-10-27 11:08:59
  • 431

HK + FFMPEG + X264 + QSV + libRTMP + FMS踩了坑

最近自己写一个软件,利用海康摄像机的RTSP流通过ffmpeg拉取之后解码成YUV进行相关细节处理,在用X264或者QSV编码,通过rtmp发送到fms的程序。 为了保证程序的稳定性,界面配置控...
  • safeili
  • safeili
  • 2017-06-28 09:52:34
  • 442

Intel Media SDK(四)

// //               INTEL CORPORATION PROPRIETARY INFORMATION //  This software is supplied under ...
  • ww506772362
  • ww506772362
  • 2014-07-23 00:23:08
  • 6768
收藏助手
不良信息举报
您举报文章:英特尔 QSV 在 FFMPEG 中的使用(Linux)
举报原因:
原因补充:

(最多只允许输入30个字)