博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
英伟达硬件加速解码器在 FFMPEG 中的使用
阅读量:6906 次
发布时间:2019-06-27

本文共 1561 字,大约阅读时间需要 5 分钟。

私有驱动

nvenc 本身是依赖于 nvidia 底层的私有驱动的,所以想要使用编码器首先需要安装 nvidia 的私有驱动。在  的介绍中说明,最新版本的 nvenc sdk 5.0 在  需要 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 .

目前 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  0nvidia               8380416  36 nvidia_uvmdrm                   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 头文件,这个头文件并没有包含在私有驱动中,你需要到  中下载 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

转载地址:http://xdgdl.baihongyu.com/

你可能感兴趣的文章
JavaScript 的面向对象(OO)
查看>>
js 中怎么使 if(aᅠ==1 && a== 2 && ᅠa==3) 返回 true?
查看>>
【PM&数据】如何正确地利用产品数据【上】
查看>>
【翻译】 What is class diagram(什么是类图)?
查看>>
React 16.5.2 + webpack 4.2 多页面配置
查看>>
深夜报社哪家强?我分析了大众点评20w家店告诉你!
查看>>
JS是世界上最好的语言—— J.A.R.V.I.S诞生记
查看>>
iOS------自定义方向设置单边borderLayer
查看>>
[译] 数字产品为人们授权的时代已来
查看>>
学习Webgl做的建筑图,有大神指教下
查看>>
弹性布局
查看>>
小哥哥要了解一下图片懒加载吗?
查看>>
图的表示
查看>>
2018年Unity学习资源指南(精心整理)
查看>>
实现快递单号物流信息接口API
查看>>
最详细Log4j使用教程
查看>>
刮刮卡demo-canvas实践
查看>>
SocketOutputStream和SocketChannel write方法的区别和底层实现
查看>>
Flutter技术简介
查看>>
Flutter 自定义功能强大的下拉筛选菜单 package
查看>>