intel硬件視頻加速簡要整理

硬件視頻加速技術


硬件視頻加速(Hardware video acceleration) 通過讓顯卡編解碼視頻,從而減輕cpu負擔並且還能節省電源。

當視頻內容存儲在硬盤、dvd、攝像機、手機或廣播媒體上時,通常會被壓縮並編碼成特定的格式。當你想要播放、上傳或複製內容到你的手機時,必須先對其進行解碼,然後再以一種新的格式重新編碼,這是一個耗費資源和時間的過程。硬件視頻加速技術通過讓顯示卡來快速解碼,使處理器能夠完成其他任務,提高系統響應能力。

在linux上的幾種實現:
Video Acceleration API (VAAPI)英特爾開發的規範和開源庫,提供硬件加速視頻的編/解碼。
Video Decode and Presentation API for Unix (VDPAU)是一套NVIDIA開發的,用於將部分視頻解碼和渲染分擔給GPU來處理的開源庫和API。

NVDECODE/NVENCODENVIDIA Fermi, Kepler, Maxwell and Pascal系列顯卡專有的硬件加速API

intel 硬件加速技術

intel 的開源媒體棧

MSDK : ​https://github.com/Intel-Media-SDK/MediaSDK
Libva : https://github.com/intel/libva
i965 driver : ​https://github.com/intel/intel-vaapi-driver
iHD driver : ​https://github.com/intel/media-driver

VA-API

開源驅動:

AMD: 位於官方軟件倉庫的libva-vdpau-drivermesa兩者爲 Radeon 9500 或更新的GPU提供支持。
Intel: 位於官方軟件倉庫的libva-intel-driver軟件包爲 GMA 4500 系列或者更新的GPU提供支持。
NVIDIA: 位於官方軟件倉庫的libva-vdpau-drivermesa兩者爲 GeForce 8 系列和更新的GPU提供支持。位於AUR的 nouveau-fwAUR 軟件包包含從NVIDIA閉源驅動中提取出的必要的固件文件。

閉源驅動:

AMD: 位於AUR的libva-xvba-driverAUR[broken link: archived in aur-mirror]軟件包爲 Radeon HD 4000 系列或更新的GPU提供支持。在 Radeon HD 5000 系列或者更新的GPU上請使用 catalyst-utilsAUR 驅動;在 Radeon HD 4000 系列上使用 catalyst-total-hd234kAUR 作爲驅動程序。
NVIDIA: 位於官方軟件倉庫的libva-vdpau-driver軟件包和nvidia-utils驅動爲 GeForce 8 系列或更新的GPU提供支持。

intel 依賴libva-intel-driver

AMD 依賴libva-mesa-driver)

安裝

以前整理過ubuntu下的簡潔安裝記錄:
linux 下 intel vaapi安裝

主要是安裝media-driver及其依賴庫。

檢驗 VA-API
運行 libva-utils 包提供的 vainfo工具 來檢查 VA-API 的設置:

$ vainfo
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.7.3
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointEncSliceLP
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      : VAEntrypointVLD
      VAProfileH264MultiviewHigh      : VAEntrypointEncSlice
      VAProfileH264StereoHigh         : VAEntrypointVLD
      VAProfileH264StereoHigh         : VAEntrypointEncSlice
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileVP8Version0_3          : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice

樣例

ffmpeg vaapi h264加速樣例,其他ffmpeg wiki還有很多。

$ ffmpeg -threads 1 -i file.ext -vaapi_device  /dev/dri/renderD128 -vcodec h264_vaapi -vf format='nv12|vaapi,hwupload' output.mp4

代碼例 曾經寫過的vaapi樣例: 解碼->overlay->編碼
vaapi-test.go

Intel Quick Sync(QSV)

除了VAAPI之外,intel還有一項自己平臺專屬的硬件加速技術QSV(quick-sync-video)

Quick Sync Video 使用Intel圖形技術專用媒體處理能力來快速編解碼。
ffmpeg wiki有一頁qsv的介紹,但是推薦使用VA-API(iHD / i965) 驅動代替libmfx.

API支持情況

QSV支持訪問多種不同的媒體庫API:
DXVA2 / D3D11VA : 標準Windows api,由Intel圖形驅動程序實現,以支持視頻解碼。

linux libmfx:這是intel的一個庫,可以作爲Intel Media SDK的一部分安裝,並且支持一些編碼和解碼類型。

Windows libmfx: 英特爾的圖形驅動程序提供,它支持所有的編碼和解碼的類型。

Media Foundation:通過英特爾圖形驅動程序,支持一部分編解碼類型,沒有繼承進ffmpeg。

VAAPI i965驅動:這是一個幾乎免費的libva/VAAPI驅動程序。大多數Linux發行版都打包了它。

VAAPI iHD驅動:Linux上的libmfx後期使用了的一個修改過的libva和VAAPI驅動程序;這也可以由用戶直接使用。

vaapi/mfx比較

vaapi/i965

1)在大多數Linux發行版中都是作爲標準打包的。
2)可運行在所有可用的硬件上,包括一些較老和較便宜的設備。
3)支持大多數編解碼器。
4)通用的API,也可以使用基於Mesa的AMD / Nvidia硬件。
5)可與標準api (EGL/OpenGL, OpenCL)交互。

libmfx /iHD

1)在某些情況下,可能會提供更好的編碼質量(如look_ahead)。
2)在某些情況下(如MFE,特別是在Iris圖形上)可能會提供更高的編碼吞吐量。
3)linux和windows皆通用的API。
4)可與Intel實現的OpenCL實現交互。

安裝

linux
可以安裝基於vaapi開源的MediaSDK

windows
官方有驅動下載:https://software.intel.com/media-sdk

樣例

h264解碼

ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -f null -

代碼例: qsv 解碼->overlay->編碼
qsv-test.go

參考 : Wiki/QuickSync

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章