1.目标

<1>显卡性能参数;
<2>方案可行性;

2.平台信息

2.1.查看当前显卡信息

命令: 
lspci |grep VGA 
信息: 
01:00.0 VGA compatible controller: NVIDIA Corporation GK106 [GeForce GTX 645 OEM] (rev a1)

解析: 
GK106,是一个由英伟达公司制造的适配器图形处理和加速核心芯片。

从NVIDIA支持的矩阵表中查找出GK106支持格式分别为: 
NVDEC解码:MPEG-2 VC-1 H.264(AVCHD) 
NVENC编码:H.264 (AVCHD) YUV 4:2:0

3.NVIDIA

3.1.NVIDIA参考资料

  • NVIDIA VIDEO CODEC SDK
  • NVIDIA支持的矩阵表
  • NVIDIA显卡驱动
  • CUDA工具集
  • ffmpeg应用nvidia
  • 个人云盘NVIDIA驱动

3.2.NVIDIA性能参数

从NVIDIA的video encode performance中查找到Quadro K4000:支持同时编码16路1920 X 1080 H.264 (AVCHD) YUV 4:2:0,支持高性能和高质量,以及低延时模式;

注意:目前所有的NVIDIA都不支持 4:2:2编码 
支持的编码格式总集:

H.264 (AVCHD) YUV 4:2:0
H.264 (AVCHD) YUV 4:4:4
H.264 (AVCHD) Lossless
H.265 (HEVC) YUV 4:2:0
H.265 (HEVC) YUV 4:4:4
H.265 (HEVC) Lossless
H.265 (HEVC) 8k

支持的解码格式总集:

MPEG-2
VC-1
H.264(AVCHD)
H.265(HEVC)
VP8
VP9

3.3.NVIDIA显卡驱动

驱动网站打开较慢,因此把我的驱动上传到个人云盘NVIDIA驱动,里面有产品支持列表

3.3.1.删除旧驱动

sudo apt-get purge nvidia*

3.3.2.禁用自带nouveau nvidia驱动

gedit /etc/modprobe.d/blacklist-nouveau.conf

并在文件blacklist-nouveau.conf中添加以下内容:

blacklist nouveau
options nouveau modeset=0

更新:

update-initramfs -u

修改后需要重启系统。确认下Nouveau是否已经被禁用,使用命令:

lsmod | grep nouveau

3.3.3.安装驱动

重启系统,使用Ctrl+Alt+F1进入tty1控制台:

service lightdm stop
./NVIDIA-Linux-x86_64-375.26.run
service lightdm start
3.3.4.其他
   ./NVIDIA-Linux-x86_64-375.26.run --update     安装时先下载最新驱动包./NVIDIA-Linux-x86_64-375.26.run --uninstall  卸载驱动

4.ffmpeg

4.1.ffmpeg对NVIDIA GPU的支持

  • 支持h.264和hevc硬件加速编码; 支持h.264, hevc, VP9, VP8, MPEG2和MPEG4的硬件加速解码;
  • 可设置跟视频编码质量相关的参数,如:preset, rate等;
  • 可使用FFmpeg中的filters进行端对端1:n编码或1:n转码视频硬件加速通道;
  • 能添加自己编写的高性能CUDA filters;
  • 同时支持Windows和Linux support;

此外, NVIDIA 也为GPU的视频处理任务提供的插件功能. 
GPU Resize:将一个输入转换为多个分辨率并行输出; 
GPU Zero-copy:使能GPU-accelerated插件就可以避免在处理视频时,系统和GPU内存间的数据拷贝;

4.2.ffmpeg对NVIDIA GPU的支持步骤

  • 下载FFmpeg源码 (https://git.FFmpeg.org/FFmpeg.git) 下载NVIDIA的最新Video Codec SDK 将NVIDIA的头文件复制到ffmpeg的编译环境中;
  • 下载安装NVIDIA驱动(apt install nvidia-375)
  • 添加如下的configure命令(nv_sdk应包含cuda的库和头文件) :
./configure \--enable-nonfree \
           --disable-shared \
           --enable-nvenc \
           --enable-cuda \
           --enable-cuvid \
           --enable-libnpp \
           --extra-cflags=-Ilocal/include \
           --extra-cflags=-I../nv_sdk \
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意:实际使用的是以下配置:

#! /bin/bash
bash configure \--enable-shared \
    --disable-static \
    --disable-yasm \
    --disable-doc \
    --enable-gpl \
    --enable-pthreads \
    --disable-w32threads \
    --disable-os2threads \
    --enable-debug  \
    --enable-nvenc \
    --enable-cuda \
    --enable-cuvid \
    --extra-cflags="-Invidia_sdk -I/usr/local/cuda-8.0/include" \
    --extra-ldflags="-Lnvidia_sdk -L/usr/local/cuda-8.0/lib64" \
    --enable-nonfree \
    --enable-libfreetype \
    --enable-libfribidi \
    --enable-libfontconfig \
    --enable-libnpp \
    --enable-gpl
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

4.3. 查看nvidia硬件加速编解码器:

ffmpeg -codecs | grep cuvid
信息如下:DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_cuvid ) (encoders: h264_nvenc h264_vaapi nvenc nvenc_h264 )DEV.L. hevc  H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_cuvid ) (encoders: nvenc_hevc hevc_nvenc hevc_vaapi )ffmpeg -codecs | grep nvenc信息如下:DEV.LS h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_cuvid ) (encoders: h264_nvenc h264_vaapi nvenc nvenc_h264 )DEV.L. hevc H.265 / HEVC (High Efficiency Video Coding) (decoders: hevc hevc_cuvid ) (encoders: nvenc_hevc hevc_nvenc hevc_vaapi )DEVIL. mjpeg Motion JPEG (decoders: mjpeg mjpeg_cuvid ) (encoders: mjpeg mjpeg_vaapi )DEV.L. mpeg1video MPEG-1 video (decoders: mpeg1video mpeg1_cuvid )DEV.L. mpeg2video MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_cuvid )DEV.L. mpeg4 MPEG-4 part 2 (decoders: mpeg4 mpeg4_cuvid )D.V.L. vc1 SMPTE VC-1 (decoders: vc1 vc1_cuvid )D.V.L. vp8 On2 VP8 (decoders: vp8 vp8_cuvid )D.V.L. vp9 Google VP9 (decoders: vp9 vp9_cuvid )

5.结论

  • 最后成功进行了硬件加速转码,由于显卡是GeForce系列,因此只能验证一路:
  • 从结果来看,使用硬件加速确实释放了CPU资源,编码速度也有明显提高,但质量相比X264有稍微的不足;
  • 抛开编解码质量和速度的严格要求,nvidia需要图形专业级别的显卡支持,方能做出产品;

6.后记

在20170125时,再一次投入nvidia的开发

7.工具

vmstat -w -n 1 
nvidia-bug-report.sh 
nvidia-cuda-mps-server 
nvidia-detector 
nvidia-modprobe 
nvidia-settings 可图形查看显卡使用情况 
nvidia-uninstall 
nvidia-cuda-mps-control 
nvidia-debugdump 
nvidia-installer 
nvidia-smi 
nvidia-xconfig

8.问题list

8.1.cannot load libcuda.so.1

原因:该问题是由于我升级了nvidia(ubuntu版本)的驱动(由375.39升级到375.51)引起的 
解决:卸载驱动,下载官方驱动375.39重新安装

8.2.解码阻塞

现象: 
1.源丢包时,解码函数总是被阻塞,使用新的接口解决; 

8.3.结果

采用M2000,最终极限并发能达到48路左右,但实际采用32路

[FFMPEG硬件加速]nvidia方案相关推荐

  1. ffmpeg 硬件加速 wmv 视频转码

    基于 Windows 下演示,Linux 下也可以通用.建议先阅读关于使用硬件加速的基础部分.文章链接:ffmpeg 硬件加速视频转码指南 后文将会演示 wmv3 以及 vc1 编码的 wmv 格式视 ...

  2. Mac OSX ffmpeg 硬件加速

    Mac OSX ffmpeg 硬件加速 [toc] 首先下载最新版ffmpeg 3.3.4 安装x264 下载安装包编译安装 brew install x264 (推荐,未安装brew的请查看brew ...

  3. FFmpeg 硬件加速方案概览 (下)

    被称为"多媒体技术领域的瑞士军刀",FFmpeg拥有广泛的应用基础.不过,当(实时)处理海量视频时,需要借助各种方法提升效率.比如,短视频平台Revvel将视频转码服务迁移到AWS ...

  4. FFmpeg 硬件加速方案概览 (上)

    被称为"多媒体技术领域的瑞士军刀",FFmpeg拥有广泛的应用基础.不过,当(实时)处理海量视频时,需要借助各种方法提升效率.比如,短视频平台Revvel将视频转码服务迁移到AWS ...

  5. FFmpeg 硬件加速(硬解码)介绍

    参考地址 概述   本文主要针对ffmpeg支持的硬解码做一个总结阐述.   许多平台提供对专用硬件的访问,以执行一系列与视频相关的任务.使用此类硬件可以更快地完成某些操作,例如解码.编码或过滤,或者 ...

  6. ffmpeg 硬件加速视频转码指南

    0. 系统环境 基于 Windows 下演示,Linux 下也可以适用. 所使用 ffmpeg 版本为 BtbN 编译的 win64-gpl 版(非 gpl-share),项目地址:BtbN / FF ...

  7. 树莓派 —— 安装RaspberryPi系统(为了编译ffmpeg硬件加速)

    背景      最近项目上采购了一台"云盒"设备,该设备功能是将输入的rtsp转封装后直接推流到指定公网的rtmp服务器或将输入的hdmi视频数据通过硬编码后推流到指定的公网rtm ...

  8. FFmpeg再学习 -- 硬件加速编解码

    为了搞硬件加速编解码,用了一周时间来看 CUDA,接下来开始加以总结. 一.什么是 CUDA (1)首先需要了解一下,什么是 CUDA. 参看:百度百科 -- CUDA 参看:CUDA基础介绍 参看: ...

  9. FFmpeg在Intel GPU上的硬件加速与优化

    英特尔提供了一套基于VA-API/Media SDK的硬件加速方案,通过在FFmpeg中集成Intel GPU的媒体硬件加速能力,为用户提供更多的收益.本文来自英特尔资深软件开发工程师赵军在LiveV ...

最新文章

  1. int **a[3][4] 和 sizeof(a) 和 int(**)a[3][4]
  2. Android程序员面试必备的知识点,附答案
  3. golang中的runtime
  4. 为EasyUI 的Tab 标签添加右键菜单
  5. Android 第四章 ListView 的使用
  6. 中等职业学校计算机专业定位,中等职业学校计算机专业教学探讨
  7. 建议设计日常多逛,多学习的网站
  8. 三星宣布7nm LPP芯片量产!性能高20%,功耗降50%,面积降40%
  9. Docker入门学习四之自己制作Docker镜像
  10. Android 指定宽高的ViewGroup
  11. 【IdeaVR2019快捷操作(三)】-基础功能小组协作使用介绍
  12. 计算 某一天据今天有多少天
  13. 雷柏V500s和V500的win键无效
  14. 信捷PLc的C语言大小排序筛选,信捷PLC顺序控制怎么写
  15. emc re 整改 超标_RE102测试中单点超标且高频有杂散如何整改?
  16. Java实现LeetCode第199场周赛(题号5472,5473,5474,5462)
  17. 机器学习必须需要大量数据?小数据集也能有大价值!
  18. mysql数据库中查询姓氏_数据库查询表添加姓氏
  19. 最小二乘法拟合圆公式推导及其实现
  20. HiveSql一天一个小技巧:如何不使用union all 进行列转行

热门文章

  1. ueditor处理不能上传音乐的问题
  2. 【图形学】30 前向渲染多光照场景代码理解
  3. android拖拽排序,DragSortListView:可拖动排序的listview
  4. 微信公众平台开发框架WeiPHP——插件开发 有大用
  5. 什么是原油期货(什么是原油期货交易)
  6. 将石油和天然气推向边缘
  7. 接天露之水,吸大地之灵气
  8. MySQL之导入导出视图索引执行计划
  9. 中信量化项目总结报告
  10. 路由器命令使用、端口配置和静态路由配置