zoukankan      html  css  js  c++  java
  • intel硬件视频加速简要整理

    硬件视频加速技术


    硬件视频加速(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-drivermesa两者为 Radeon 9500 或更新的GPU提供支持。
    Intel: 位于官方软件仓库的libva-intel-driver软件包为 GMA 4500 系列或者更新的GPU提供支持。
    NVIDIA: 位于官方软件仓库的libva-vdpau-drivermesa两者为 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 的设置:

    $ 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.

    API支持情况

    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/mfx比较

    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

  • 相关阅读:
    C#中RDLC合并两个列的值
    C#中RDLC控制某列的显示隐藏
    VS中RDLC提示类型不一致
    C#中使用NPOI提示(找到的程序集清单定义与程序集引用不匹配)
    Web项目访问在C盘的图片(不在当前项目路径下的图片)
    【转】主成分分析(PCA)
    【转】协方差的意义
    [转]hpp.h与.h的区别
    SPEC-RFC3261总述
    (转载)VoLTE简介
  • 原文地址:https://www.cnblogs.com/ailumiyana/p/12450118.html
Copyright © 2011-2022 走看看