硬件视频加速(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-driver和mesa两者为 Radeon 9500 或更新的GPU提供支持 。
Intel: 位于官方软件仓库的libva-intel-driver软件包为 GMA 4500 系列或者更新的GPU提供支持 。
NVIDIA: 位于官方软件仓库的libva-vdpau-driver和mesa两者为 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 的设置
$ vainfolibva info: VA-API version 0.39.4libva info: va_getDriverName() returns 0libva info: Trying to open /usr/lib/dri/i965_drv_video.solibva info: Found init function __vaDriverInit_0_39libva info: va_openDriver() returns 0vainfo: VA-API version: 0.39 (libva 1.7.3)vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.7.3vainfo: Supported profile and entrypointsVAProfileMPEG2Simple: VAEntrypointVLDVAProfileMPEG2Simple: VAEntrypointEncSliceVAProfileMPEG2Main: VAEntrypointVLDVAProfileMPEG2Main: VAEntrypointEncSliceVAProfileH264ConstrainedBaseline: VAEntrypointVLDVAProfileH264ConstrainedBaseline: VAEntrypointEncSliceVAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLPVAProfileH264Main: VAEntrypointVLDVAProfileH264Main: VAEntrypointEncSliceVAProfileH264Main: VAEntrypointEncSliceLPVAProfileH264High: VAEntrypointVLDVAProfileH264High: VAEntrypointEncSliceVAProfileH264High: VAEntrypointEncSliceLPVAProfileH264MultiviewHigh: VAEntrypointVLDVAProfileH264MultiviewHigh: VAEntrypointEncSliceVAProfileH264StereoHigh: VAEntrypointVLDVAProfileH264StereoHigh: VAEntrypointEncSliceVAProfileVC1Simple: VAEntrypointVLDVAProfileVC1Main: VAEntrypointVLDVAProfileVC1Advanced: VAEntrypointVLDVAProfileNone: VAEntrypointVideoProcVAProfileJPEGBaseline: VAEntrypointVLDVAProfileJPEGBaseline: VAEntrypointEncPictureVAProfileVP8Version0_3: VAEntrypointVLDVAProfileVP8Version0_3: VAEntrypointEncSliceVAProfileHEVCMain: VAEntrypointVLDVAProfileHEVCMain: 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: 英特尔的图形驱动程序提供,它支持所有的编码和解码的类型 。
推荐阅读
- 功夫红茶视频,功夫红茶历史
- 头条西瓜发视频就能赚钱,学会这5个方法,新手0粉丝就能有收益
- 分享一款全平台播放器,支持几十种视频格式播放
- Python如何构建自动在线刷视频
- 制作这9类视频的创作者,将不再享有萌芽补贴,你中招了吗?
- 在音频通话中,如何将WebRTC音频通话升级为视频通话
- 精密硬件加工的工艺流程是什么
- 使用 Python 将 MP4视频 转换为GIF动画
- 视频调整分辨率的python代码,一如既往地实用
- 怎样制作桂花茶视频,桂花茶简介