【视频开发】 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
    评论
本书共16章,分为4篇,详细讲解了使用各种软件和平台进行音、视频多媒体编程的技术,以案例为对象展示实现过程、分析技术难点。主要内容包括软件Visual C++2005的开发技术、DirectSound开发音频、DirectShow/VFW开发视频、MMX/SSE进行多媒体汇编编程、DM642 DSP进行音视频算法优化和主流视频算法MPEG-4/H.264的编码原理及工程实践。本书系统地介绍Visual C++ 2005进行流媒体编程的基本思路和方法,采用案例为主的叙述方式,将大量的技术理论融入具体的案例剖析中。采用的案例均来源于作者实际开发工作,具有很好的实用价值,可以帮助读者在开发中进行参考或直接应用。 第1篇 开发基础 1 第1章 数字音视频开发技术基础 3 1.1 数字音视频基本概念 4 1.1.1 数字音频技术基础 4 1.1.2 各种数字音频文件格式基础 4 1.1.3 视频的相关基础概念 8 1.1.4 常见的视频文件格式 8 1.2 数字音视频数据的编解码技术 10 1.2.1 音频数据的编解码 11 1.2.2 视频数据的编解码 13 1.2.3 音视频编码的相关标准 13 1.3 音视频处理平台的选择 15 1.3.1 个人多媒体计算机 15 1.3.2 嵌入式处理器ARM 16 1.3.3 数字媒体处理器DSP 16 1.4 音视频开发的典型应用 16 1.4.1 个人消费类电子产品 16 1.4.2 公共领域的音视频应用 18 1.5 常用音视频开发工具 21 1.5.1 DirectSound音频开发 21 1.5.2 DirectShow视频开发 21 1.5.3 DSP CCS算法开发 22 1.6 本章小结 23 第2章 Visual C++ 2005开发基础 25 2.1 Visual C++ 2005新增特性 26 2.1.1 句柄(Handles) 26 2.1.2 类型的声明 26 2.1.3 对代码编辑的改进 27 2.2 VC能做的事情 27 2.2.1 生成传统的控制台应用程序 27 2.2.2 生成基于MFC的应用程序 32 2.2.3 生成静态链接库 40 2.2.4 生成动态链接库 41 2.3 利用向导完成基本开发 46 2.3.1 生成应用程序 46 2.3.2 生成应用库LIB/DLL 53 2.4 MFC编程基础 56 2.4.1 Windows消息与事件 56 2.4.2 消息与事件的响应 63 2.4.3 常用消息 66 2.5 基于对话框的编程 68 2.5.1 创建和编辑对话框 68 2.5.2 对话框种类 75 2.6 常用控件使用技巧 79 2.6.1 按钮类控件的使用 80 2.6.2 文本可编辑类控件的使用 81 2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 如何构造unicode版本的程序 87 2.8.3 如何使用.def文件 87 2.8.4 如何正确编写Win32 DLL 87 2.8.5 如何编写和使用资源DLL 88 2.8.6 如何实现对话框的数据交换 88 2.9 本章小结 89 第2篇 音频开发 91 第3章 DirectSound开发基础 93 3.1 Microsoft DirectSound SDK 94 3.1.1 比较DirectSound与DirectMusic 94 3.1.2 DirectSound SDK能做什么 95 3.1.3 如何获取DirectSound SDK 96 3.1.4 DirectSound SDK的基本结构 98 3.1.5 Directsound SDK安装 100 3.1.6 选择最适合用户的DirectSound SDK 100 3.1.7 用DirectSound进行编程的必要步骤 102 3.2 DirectSound的详细使用方法 103 3.2.1 DirectSound设备对象 104 3.2.2 DirectSound缓冲区对象 107 3.2.3 使用WAV数据 114 3.2.4 使用音效 116 3.3 开发环境配置 118 3.3.1 Visual C++基本开发环境配置 119 3.3.2 DirectSound应用程序的开发环境配置 119 3.3.3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值