intel硬件視頻加速簡要整理

硬件視頻加速技術

[toc]html


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

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

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

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

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-driverwindows

VA-API

開源驅動: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閉源驅動中提取出的必要的固件文件。iview

閉源驅動:ide

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

原文出處:https://www.cnblogs.com/ailumiyana/p/12450118.html

相關文章
相關標籤/搜索