英特尔 QSV 在 FFMPEG 中的使用(Linux)
Intel Media SDK
现在Intel
不再发布单独的Intel Media SDK
, 这个组件在 Linux 平台下集成在Intel Media Server Studio
中,后文简称MMS
目前的MMS
版本推荐的安装平台只有一个CentOS
(SUSE12
在当前版本中也算是一个推荐平台)。其他平台的安装比较复杂,官方也不太推荐使用。后文的介绍是基于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
。
更多相关文章
- 安装文件check_mk linux agent安装
- Linux源码包里有个scripts文件夹,里面放的东西起什么作用?
- linux中使用nfs共享文件
- Linux下文件同步、备份神器之-------rsync
- Linux利用i节点删除乱码文件
- debain 系统 ll 命令无法使用.目录和文件没有颜色区分解决之道
- 通过排除其父文件夹为多个目录创建单个tar文件
- 解决useradd 用户后没有添加用户Home目录的情况,Linux改变文件或
- 如何使用与相同文件运行的命令更新文件?