1. 主流程,参考官网
https://developer.nvidia.com/ffmpeg
2. CUDA-Toolkit 与驱动版本对应表
3. GPU 各型号功能及特性支持matrix
https://developer.nvidia.com/video-encode-decode-gpu-support-matrix
4. 驱动安装
没有装驱动的装驱动,装驱动的通过nvidia-smi 命令查看当前的驱动版本
没有驱动的,从官网下载指定型号驱动并安装
https://www.nvidia.com/download/index.aspx?lang=en-us
5. CUDA-Toolkit ,根据驱动下载对应版本
https://developer.nvidia.com/cuda-downloads
安装:
sh cuda_10.0.130_410.48_linux
由于已经装过驱动了,第一个选no
6. 下载nv-codec-header
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers && sudo make install && cd –
## 通过pkg-config 验证ffnvcodec,如果找不到,把ffnvcodec.pc路径添加到PKG_CONFIG_PATH
pkg-config --modversion ffnvcodec
## Note 一定要安装pkg-config, 不然ffmpeg 获取不到nv-codec版本号会出错
nv-codec-header 与驱动版本对应关系
nv-codec-header version | driver version |
---|---|
9.1 | >435.21 |
9.0 | >418.30 |
8.2 | >396.24 (optional CUA 10 >410.48) |
… | … |
7. 下载ffmpeg
https://git.ffmpeg.org/ffmpeg.git
## 我测试用的4.2
8. 编译选项
最基本的配置,最少的依赖
#--prefix为安装,自行修改
./configure --prefix=${workspace}/install/x86 --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --disable-lzma --disable-zlib --disable-sdl2 --disable-ffplay --disable-avdevice --enable-shared --extra-cflags=" -fPIC "
9. ffnvcodec 出错
ffnvcodec条件不满足,90%的原因是nv-codec-header版本号没有获取到或者找不到头文件
保证两点: 1. pkg-config 已安装
2. nv-codec-header 已安装
10. nv-codec 总结
(1). cuda 环境库
libcuda.so
libcudart.so
##只有这两个库
libnvidia-fatbinaryloader.so
## 跟加载库相关的库,这个很重要,不然会提示,不能加载libcuda.so,或者找不到libcuda.so.1
(2). nv-codec 环境库
libnvcuid.so
## 只有这一个库
(3). 贴上一个完整nvidia环境库截图,驱动版本410.78
11. ffmpeg 编程选择解码即可
+ // H264
+ // m_pVideoCodec = avcodec_find_decoder_by_name("h264_cuvid");
+ //H265
+ // m_pVideoCodec = avcodec_find_decoder_by_name("hevc_cuvid");
确保上述的库存在,运行过程如果找不到库, 添加库路径到LD_LIBRARY_PATH,或ld.conf中