“硬解码”是硬件解码的简称。简单而言,硬件解码就是通过显卡的视频加速功能对高清视频进行解码。因此硬解能够将CPU从繁重的视频解码运算中释放出来,使电视具备流畅播放高清视频的能力。
显卡的GPU/VPU要比CPU更适合这类大数据量的、低难度的重复工作。视频解码工作从处理器那里分离出来,交给显卡去做,这就叫做“硬解码”。主流的硬件解码方案由Intel、AMD-ATI以及Nvdia推出。
硬解码优点是效率高,功耗低、热功耗低。可以流畅的支持1080p甚至4K清晰度的电影播放,而不需要占用CPU,CPU就可以如释重负,轻松上阵,承担更多的其他任务。
硬件解码是将原来全部交由CPU来处理的视频数据的一部分交由GPU来做,而GPU的并行运算能力要远远高于CPU,这样可以大大的降低对CPU的负载。
起步较晚,软件支持度无法与软解相提并论。并且面对杂乱无章的视频编码、封装格式,硬解码无法做到全面兼容。硬解码在画面输出补偿及画质增强技术等方面和软解差距较大。
硬解码软件设置较为复杂,很多朋友根本不知道该如何正确使用GPU硬件解码。
VDPAU (Video Decode and Presentation API for Unix)是由 NVIDIA 开发的基于 UNIX 和类 UNIX 系统 (主要包括 Linux、FreeBSD 和 Solaris)下的视频硬件解码技术, 它包括视频解码、
视频后期处理、图像合成、 解码后视频图像的显示等。 它可以支持的最大视频 宽度与高度为 2048 像素, 最小视频宽度与高度为 48 像素, 并且所有编码限制在最大 8192 个宏区块内
(对 于 VC-1/WMV 是 8190 个). VDPAU 支持系统对 MPEG-1、MPEG-2、MPEG-4 ASP、VC-1/WMV9 和 H.264 视频解码的完全加速, 但 不支持 MPEG-4 ASP 的运动补偿和数据分块。
NVIDIA 的 GeForce 8 系列以上的显卡均可支持 VDPAU 对视频的硬件解码。
VDPAU 支持系统对 MPEG-1、MPEG-2、MPEG-4 ASP、VC-1/WMV9 和 H.264 视频解码的完全加速, 但 不支持 MPEG-4 ASP 的运动补偿和数据分块。
FFmpeg提供了vdpau硬解码入口支持,并不提供硬解码实现.具体的实现还是不同的硬件厂商。
不同的显卡的不同驱动对vdpau接口有不同的实现.以amd的开源驱动为例,libvdpau-radeonsi.so是vdpau的实现库。
libvdpau会在默认的路径下一般为/usr/lib/vdpau/查找驱动
,查找格式为/usr/lib/vdpau/libvdpau_${VDPAU_DRIVER}.so
VA-API规范最初是由英特尔为其GMA(图形媒体加速器)系列GPU硬件设计的,其特定目的是最终取代XvMC标准,使其成为Microsoft Windows DirectX视频加速(DxVA)API的默认Unix多平台等效项。
VA-API的视频解码/编码界面平台和窗口系统无关,但在主要针对直接渲染架构(DRI)的X Window系统上的Unix式的操作系统(包括Linux的,FreeBSD的,的Solaris),和Android的,但它可以也可能
与直接帧缓冲区和图形子系统一起用于视频输出。加速处理包括对视频解码,视频编码,子图片混合和渲染的支持。
适用于Linux的Intel Quick Sync开源驱动程序
适用于AMD和Intel显卡的Mesa开源驱动程序
适用于Linux上AMD显卡的AMDGPU-PRO驱动程序
适用于Linux上Nvidia显卡的Nvidia专有驱动程序
libva-vdpau-驱动程序,用于VDPAU支持的卡
VA-API当前在官方主线版本中支持这些视频编解码器,但是请注意,确切支持哪种视频编解码器取决于硬件和驱动程序的功能。
MPEG-2解码加速主要配置文件
VC-1 / WMV3解码加速高级配置文件
MPEG-4第2部分(H.263)(又名MPEG-4 SP / MPEG-4 ASP,更通常称为Xvid)解码加速
H.264 AVC编码加速主要配置文件
H.264 AVC解码加速High Profile
H.264 / AVC硬件可变长度解码(VLD)-CABAC
H.264 / AVC硬件可变长解码(VLD)-CAVLC
H.264 / AVC硬件逆变换(IT)
H.264 / AVC硬件运动补偿(HWMC)
H.264 / AVC硬件环路解块(ILDB)
H.265 / HEVC编码加速
H.265 / HEVC解码加速
VP9 8位编码加速
VP9 8位和10位解码加速
英特尔图形开源驱动程序支持VA-API:
intel-media-driver支持从Broadwell (2014)开始的HD Graphics系列及更高版本。
libva-intel-driver支持GMA 4500(2008)和更新的GPU,包括直至Coffee Lake的HD Graphics (2017)。
libva-intel-driver-g45-h264 AUR支持GMA 4500 H.264解码。
Intel-hybrid-codec-driver AUR支持Haswell更新为Skylake VP9解码,而Broadwell为Skylake混合VP8编码。
Nouveau开源驱动程序支持VA-API和VDPAU:
libva-mesa-driver和mesa-vdpau支持GeForce 8系列和更新的GPU,直到GeForce GTX 750 。
需要 nouveau-fw AUR固件包,目前已从NVIDIA二进制驱动程序中提取。
NVIDIA专有驱动程序通过nvidia-utils支持:
GeForce 8系列和更新的GPU上的VDPAU ;
ATI和AMDGPU开源驱动程序支持VA-API和VDPAU:
libva-mesa-driver支持Radeon HD 2000和更高版本GPU上的VA-API 。
mesa-vdpau支持Radeon R300和更新的GPU上的VDPAU 。
AMDGPU PRO专有驱动程序基于AMDGPU驱动程序构建,并支持VA-API和VDPAU。