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
。