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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM