[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
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-driver
和mesa
二者爲 Radeon 9500 或更新的GPU提供支持。 Intel
: 位於官方軟件倉庫的libva-intel-driver
軟件包爲 GMA 4500 系列或者更新的GPU提供支持。 NVIDIA
: 位於官方軟件倉庫的libva-vdpau-driver
和mesa
二者爲 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.
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/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