[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