【视频开发】 ffmpeg支持的硬解码接口

https://blog.csdn.net/lg1259156776/article/details/73274222

要启用DXVA2,请使用  --enable-dxva2  ffmpeg配置开关。

要测试解码,请使用以下命令:

<span style="color:#333333">ffmpeg -hwaccel dxva2 -threads 1 -i INPUT -f null  -  -benchmark</span>

 

****************vlc 启用 dxva2.0硬件解码后,CPU使用率明显降低*************

 

 基于ffmpeg的dxva h264硬件解码 的例子(实际上就是从vlc源码中抽出来的),但是好像没什么效果

 

http://download.csdn.NET/download/xin_hua_3/7324839

用GPU-Z工具看GPU负载确实没有负载

===============================

 

 

FFmpeg提供了硬件加速的子系统。

硬件加速允许使用特定设备(通常是图形卡或其他特定设备)来执行多媒体处理。这允许使用专用硬件来执行要求苛刻的计算,同时使CPU免于这种计算。通常,硬件加速使特定硬件设备(通常是GPU)能够执行与解码和编码视频流或过滤视频相关的操作。

当使用FFmpeg工具时,通过-hwaccel  选项启用HW辅助解码  ,该选项启用特定解码器。每个解码器可能具有特定限制(例如,H.264解码器可能仅支持基线简档)。通过使用特定编码器(例如nvenc_h264)启用HW辅助编码  。仅在几个过滤器中支持过滤硬件辅助处理,在这种情况下,您可以通过过滤器选项启用OpenCL代码。

有几种硬件加速标准API,其中一些在某种程度上由FFmpeg支持。

平台概述

API可用性

 Linux英特尔Linux NVIDIAWindows英特尔Windows NVIDIAOS X.Android的iOS版覆盆子皮
CUDAñññññ
Direct3D 11ññññññ
DXVA2ññññññ
MediaCodecñññññññ
MMALñññññññ
NVENCññññññ
OpenCL的ñññ
快速同步ññññññ
VA-API和*ññññññ
VDA†ñññññññ
VDPAUñññññññ
VideoToolboxññññññ
XvMCññññññ

*半维护。

†上游弃用。

FFmpeg实现

 AVHWAccel解码器编码器CLI过滤AVHWFramesContext
CUDAñññN / A和*
Direct3D 11ñN / Añññ
DXVA2ñN / Aññ
MediaCodecññN / AN / Añ
MMALN / AñN / Añ
NVENCN / AN / AN / AN / Añ
OpenCL的N / AN / AN / AN / Añ
快速同步ññ
VA-APIñ
VDAN / AN / Añ
VDPAUñ†N / Añ
VideoToolboxñññ
XvMCñ†N / AñN / Añ

N / A API不直接支持此功能,或者当前不可实现此功能。

* 工作正在进行中。如果指示“Y”,则基础设施已到位,但尚未实施过滤器。

†实际上是,但已被弃用,不应使用。

VDPAU

视频解码和演示API为Unix。由NVidia为UNIX / Linux  系统开发。要启用此功能,您通常需要分发中的libvdpau开发包和兼容的图形卡。

注意,VDPAU不能用于解码内存中的帧,压缩帧由libavcodec发送到VDPAU支持的GPU设备,然后可以使用VDPAU API访问解码图像。这不是由FFmpeg的自动完成的,但必须在应用程序级别(检查例如做  ffmpeg_vdpau.c  通过使用文件  ffmpeg.c)。此外,请注意,使用此API无法将解码后的帧移回RAM,例如,如果您需要再次对解码帧进行编码(例如,在服务器上进行转码时)。

目前通过libavcodec中的VDPAU支持几个解码器,特别是MPEG视频,VC-1,H.264,MPEG4。

XvMC

XVideo运动补偿。这是X Window系统的X视频扩展(Xv)的扩展(因此仅在UNIX / Linux上可用)。

官方规范,请访问:  http://www.xfree86.org/~mvojkovi/XvMC_API.txt

VA-API

视频加速API(VA API)是一种非专有且免版税的开源软件库(“libVA”)和API规范,最初由英特尔开发,但可与其他设备结合使用。只有Linux:  https://en.wikipedia.org/wiki/Video_Acceleration_API

DXVA2

Direct-X视频加速API,由Microsoft开发(支持Windows和XBox360)。

链接到MSDN文档:  http://msdn.microsoft.com/en-us/library/windows/desktop/cc307941%28v=vs.85%29.aspx

目前支持几种解码器,特别是H.264,MPEG2,VC1和WMV3。

DXVA2硬件加速仅适用于Windows。为了构建支持DXVA2的FFmpeg,您需要安装dxva2api.h头文件。对于MinGW,可以通过下载VLC维护的标头来完成:

​http://download.videolan.org/pub/contrib/dxva2api.h

并将其安装在include补丁中(例如在  / usr / include /中)。

对于MinGW64,默认提供dxva2api.h。安装mingw-w64的一种方法是通过  pacman  存储库,可以使用以下两个命令之一安装,具体取决于体系结构:

<span style="color:#333333">pacman -S mingw-w64-i686-gcc
pacman -S mingw-w64-x86_64-gcc
</span>

要启用DXVA2,请使用  --enable-dxva2  ffmpeg配置开关。

要测试解码,请使用以下命令:

<span style="color:#333333">ffmpeg -hwaccel dxva2 -threads 1 -i INPUT -f null  -  -benchmark
</span>

VDA

视频解码API,仅在MAC上受支持。H.264解码在FFmpeg / libavcodec中可用。

开发者文档:  https://developer.apple.com/library/mac/technotes/tn2267/_index.html

NVENC

NVENC是由NVIDIA开发的API,可以使用NVIDIA GPU卡执行H.264和HEVC编码。FFmpeg通过nvenc_h264  和  nvenc_hevc  编码器支持NVENC  。要在FFmpeg中启用它,您需要:

  • 支持的GPU
  • 支持的司机
  •  从NVENC SDK 本地安装的  nvEncodeAPI.h头文件
  • ffmpeg  配置了  --enable-nvenc

访问  NVIDIA视频编解码器SDK  下载SDK,并了解更多关于所支持的GPU和支持的驱动程序。

用法示例:

<span style="color:#333333">ffmpeg -i input -c:v nvenc_h264 -profile high444p -pixel_format yuv444p -preset default output.mp4
</span>

您可以使用ffmpeg -h encoder = nvenc_h264  或  ffmpeg -h encoder = nvenc_hevc查看可用的预设,其他选项和编码器信息  。

注意:  如果您  发现无NVENC功能设备  错误,请确保您使用支持的像素格式进行编码。请参阅上面显示的编码器信息。

英特尔QSV

英特尔QSV(快速同步视频)是一种允许使用最近的英特尔CPU和最新英特尔CPU支持的最新英特尔CPU和集成GPU进行解码和编码的技术。请注意,(CPU)GPU需要与QSV和OpenCL兼容。某些(较旧的)支持QSV的GPU与OpenCL不兼容。请参阅:  http://www.intel.com/content/www/us/en/architecture-and-technology/quick-sync-video/quick-sync-video-general.htmlhttps://software.intel .COM / EN-US /用品/ Intel的SDK换的OpenCL应用-2013释放,笔记 

要启用QSV支持,需要英特尔®媒体SDK集成在英特尔媒体服务器演播室:  https://software.intel.com/en-us/intel-media-server-studio

英特尔®媒体服务器工作室适用于Linux和Windows,包含libva和libdrm库,libmfx调度程序库和英特尔驱动程序。libmfx是根据系统功能选择编解码器的库,如果硬件加速编解码器不可用,则回退到软件实现。

FFmpeg QSV支持依赖于libmfx,但英特尔提供的库没有附带  pkg-config  文件和正确的安装程序。因此安装库最简单的就是在这里使用由lu_zero打包libmfx版本:  https://github.com/lu-zero/mfx_dispatch

Windows上的要求:安装Intel Media Server Studio中包含的Intel Media SDK,它带有图形安装程序和MinGW编译环境(例如由MSYS2提供,带有相应的Mingw-w64软件包)。然后,您需要构建libmfx并将其安装在pkg-config识别的路径中。例如,如果在/ usr / local中安装,   则需要更新$ PKG_CONFIG_PATH  环境变量,使其指向  / usr / local / lib / pkgconfig。

Linux上的要求:您需要依赖Intel Media Server Studio for Linux,或者使用最近支持的系统,包括libva和libdrm库,libva Intel驱动程序以及lu_zero打包的libmfx库。注意:如果您使用Intel Media Server Studio通用安装脚本,安装脚本可能会覆盖您的系统库并破坏系统。

请检查以下网站获取有关的各种Linux平台的英特尔图形堆栈的最新信息:  https://01.org/linuxgraphics

要在FFmpeg构建中启用QSV支持,请使用--enable-libmfx进行配置  。

FFmpeg通过_qsv  后缀标识的几个编解码器集成了对解码和编码的支持  。特别是,它目前支持MPEG2视频,VC1(仅解码),H.264和H.265。

例如,要使用h264_qsv编码为H.264  ,您可以使用以下命令:

<span style="color:#333333">ffmpeg -i INPUT -c:v h264_qsv -preset:v fast out.qsv.mp4
</span>

OpenCL的

官方网站:  https://www.khronos.org/opencl/

目前仅用于过滤(去抖动和非锐化过滤器)。要使用OpenCL代码,您需要使用--enable-opencl启用构建  。libavutil / opencl.h中提供了使用FFmpeg中的OpenCL API的API。目前尚未支持解码/编码。

外部资源

 

配置--list-decoders | grep h264

 

h264_crystalhd
 h264_mmal
h264_qsv  ===》这个对应vaapi?
h264_vda
h264_vdpau ====》VDPAU

 

 

 

2016年6月27日,FFmpeg 3.1“Laplace”

 

FFmpeg 3.1“Laplace”,一个新的主要版本,现在可用!一些亮点:

  • DXVA2加速HEVC Main10解码
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值