##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参考资料
###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的支持
此外, NVIDIA 也为GPU的视频处理任务提供的插件功能.
GPU Resize:将一个输入转换为多个分辨率并行输出;
GPU Zero-copy:使能GPU-accelerated插件就可以避免在处理视频时,系统和GPU内存间的数据拷贝;
###4.2.ffmpeg对NVIDIA GPU的支持步骤
./configure \
--enable-nonfree \
--disable-shared \
--enable-nvenc \
--enable-cuda \
--enable-cuvid \
--enable-libnpp \
--extra-cflags=-Ilocal/include \
--extra-cflags=-I../nv_sdk \
注意:实际使用的是以下配置:
#! /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
###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.结论
##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路
ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
[email protected] mailing list or IRC #ffmpeg on irc.freenode.net.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.
解决:
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
make
sudo make install