这篇文档介绍如何在 ffmpeg 中使用 nvenc 硬件编码器。

私有驱动

nvenc 本身是依赖于 nvidia 底层的私有驱动的,所以想要使用编码器首先需要安装 nvidia 的私有驱动。在 NVIDIA
VIDEO CODEC SDK
 的介绍中说明,最新版本的 nvenc sdk 5.0 在 Linux 需要
346.22 以上的驱动,在windwos 下则需要 347.07 以上的驱动

The latest NVENC SDK version available is 5.0, which requires NVIDIA GPUdriver 347.09 or above for Windows and 346.22 or above for Linux.

目前 Ubuntu 15.04 上的驱动满足这个要求,Windows 平台可以直接到官网上下载最新的驱动安装。(个人不建议去官网下载最新的 Linux 驱动,因为我试了很多次都没有安装成功,最终会导致无法进入系统)。

在 Ubuntu 15.04 下使用下面的命令安装最新的驱动。

sudo apt-get install nvidia-346 \
nvidia-346-vum \
nvidia-modprobe \
nvidia-opencl-icd-346 \
nvidia-prime \
nvidia-settings

注意 nvidia-modprobe 必须要安装,因为私有驱动使用的内核模块,需要安装这个包在系统启动的时候加载这些内核模块。安装完成之后可能无法进入系统,这个应该是 nvidia 中的一个 BUG,你可以重启之后选择 grub 中的 ubuntu
高级 选项
 中低版本的内核进入系统之后重启再选择高版本的内核进入系统。这一点非常的诡异,目前没有找到原因。

启动系统之后使用 lsmod | grep nvidia 应该会得到类似下面的结果:

nvidia_uvm             69632  0
nvidia 8380416 36 nvidia_uvm
drm 348160 7 i915,drm_kms_helper,nvidia

直接通过 sudo modprobe nvidia_uvm 好像也无法成功的加载需要的模块。

另外安装驱动安装完成之后会在 /dev 下面创建几个和 nvidia 相关的设备,通过ls
/dev/nvidia*
 应该会得到类型以下的结果:

/dev/nvidia0  /dev/nvidiactl  /dev/nvidia-uvm

编译 FFMPEG

要想在 FFMPEG 中使用 nvenc 编码器,你需要在编译选项中加入 enable-nvenc选项。这个选项依赖于 nvEncodeAPI.h 头文件,这个头文件并没有包含在私有驱动中,你需要到 NVIDIA
VIDEO CODEC SDK
 中下载 SDK,解压后在Samples/common/inc 目录下有这个头文件,把它拷贝到可以链接到的目录中去。

之后编译就可以顺利的通过,得到包含 nvenc 编码器的库。

使用 nvenc

FFMPEG 中直接使用 av_find_encoder_by_name("nvenc") 就可以找到这个这个编码器并使用它。nvenc.c 的 pix_fmts_nvenc 变量定义来看,这个编码器应该是支持 YUV420PYUV444P 和 NV12 三种格式的,但是测试的过程中发现YUV420P 没办法使用,所以应该吧 AVCodecContext 的 pix_fmt 设置成NV12

【并行计算与CUDA开发】英伟达硬件加速解码器在 FFMPEG 中的使用的更多相关文章

  1. 【并行计算与CUDA开发】英伟达硬件加速编解码

    硬件加速 并行计算 OpenCL OpenCL API VS SDK 英伟达硬件编解码方案 基于 OpenCL 的 API 自己写一个编解码器 使用 SDK 中的编解码接口 使用编码器对于 OpenC ...

  2. 【并行计算-CUDA开发】英伟达硬件解码器分析

    这篇文章主要分析 NVCUVID 提供的解码器,里面提到的所有的源文件都可以在英伟达的 nvenc_sdk 中找到. 解码器的代码分析 SDK 中的 sample 文件夹下的 NvTranscoder ...

  3. CUDA学习笔记4:CUDA(英伟达显卡统一计算架构)代码运行时间测试

    CUDA内核运行时间的测量函数 cudaEvent_t start1; cudaEventCreate(&start1); cudaEvent_t stop1; cudaEventCreate ...

  4. CUDA学习笔记2:CUDA(英伟达显卡统一计算架构)与已有的VS项目结合

    一.步骤 1.先新建一个简单的控制台应用程序,项目名称为Mytest,如下图所示: 2.在项目中添加一个名为Test.cu文件,如下图所示: 3.在解决方案资源管理器中选择该项目并点击右键,在弹出的菜 ...

  5. 【视频开发】【CUDA开发】英伟达CUVID硬解,并通过FFmpeg读取文件

    虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...

  6. 不用写代码就能实现深度学习?手把手教你用英伟达 DIGITS 解决图像分类问题

    2006年,机器学习界泰斗Hinton,在Science上发表了一篇使用深度神经网络进行维数约简的论文 ,自此,神经网络再次走进人们的视野,进而引发了一场深度学习革命.深度学习之所以如此受关注,是因为 ...

  7. 英伟达CUVID硬解,并通过FFmpeg读取文件

    虽然FFmpeg本身有cuvid硬解,但是找不到什么好的资料,英伟达的SDK比较容易懂,参考FFmpeg源码,将NVIDIA VIDEO CODEC SDK的数据获取改为FFmpeg获取,弥补原生SD ...

  8. 【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南

    举报 说到显卡,就不免令人想到英伟达和AMD两家面向个人消费级和企业级最大的显示芯片生产企业,英伟达和AMD,今天小编为大家简单的介绍一下英伟达的显卡选购方面的攻略,为一些想要购买显卡的用户提供一些参 ...

  9. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )

    前言 本文讲解如何在VS 2010开发平台中搭建CUDA开发环境. 当前配置: 系统:WIN7 64位 开发平台:VS 2010 显卡:英伟达G卡 CUDA版本:6.0 若配置不同,请谨慎参考本文. ...

随机推荐

  1. 类似于ORACLE decode 的用法

    SQL Server 2008中的写法:select t.PROJECTNAME, t.BUILDCONTENTSCALE,  CASE t.PROJECTLEVEL      WHEN '0' TH ...

  2. 本月周六周日LIST集合

    最近项目中有用到本月所有的周六,周日,特此分享一下! 算法思路:写一个循环,条件为本月开始日期.本月截至日期,通过循环获取第一个周六,加一天就是周日,每增加六天就是下一个周六,依次类推,循环到月末 代 ...

  3. 解决Android SDK更新慢

    SDK Manager -> tools -> options: HTTP Proxy Server: mirrors.neusoft.edu.cn HTTP Proxy Port: 80 ...

  4. Codeforces Round #587 (Div. 3) C题 【判断两个矩形是否完全覆盖一个矩形问题】 {补题 [差点上分系列]}

    C. White Sheet There is a white sheet of paper lying on a rectangle table. The sheet is a rectangle ...

  5. git error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

    原因:git 版本过低 解决方法:卸载旧版本,重装新版本

  6. SpringMVC指定webapp的首页

    webapp的首页指的是http://localhost:8080/ 方法一 追加一个[/]URI的请求方法 @Controller public class WelcomeController { ...

  7. 学院管理系统(mysql版)

    需求 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下 讲师视图 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条学员的上 ...

  8. ICEM—气体罐子

    原视频下载地址:https://yunpan.cn/cPfzaLzkcFXVK  访问密码 62cf

  9. 异步机制 - APC

    APC : An asynchronous procedure call,异步过程调用,是微软提供的一种在线程上下文中执行代码的机制.当向一个线程插入一个USER APC时,如果线程进入alertab ...

  10. 【转】netty4.1.32 pipeline的添加顺序和执行顺序

    原文:https://www.cnblogs.com/ruber/p/10186571.html 本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是可以 ...