jetson agx xavier ffmpeg源码编译支持cuda 编解码h265推拉流

从官方下载的源代码编译后,使用ffmpeg -encoders查看支持的编码器。

ffmpeg 源码编译x264、x265、fdk-aac、cuda编解码。

1.编译x264

1)下载x264源码,参考网站:

https://code.videolan.org/videolan/x264

或者https://code.videolan.org/videolan/x264/-/tree/stable

2)解压缩,进入文件目录,里面包含有文件configure,编译动态库加上--enable-shared,路径在/usr/下,以便编译ffmpeg时能够找到。执行 ./configure --enable-shared --prefix=/usr/

1
./configure --enable-shared --prefix=/usr/

3) 然后编译,终端执行命令 make

1
make

4)安装,执行命令 make install,如果没有使用root权限,则执行命令 sudo make install

1
sudo make install

完成后,你能够在/usr/include 中找到x264相关.h文件,在/usr/lib/找到libx264相关.so文件。

2.编译x265

1)下载x265源码,我从github下载的源码。参考网址:

https://github.com/videolan/x265

2)解压进入路径,执行命令 cd x265-master/build/linux ,在该路径下,有一个脚本文件make-Makefiles.bash

3)执行命令 ./make-Makefiles.bash

1
./make-Makefiles.bash

4)现在生成了Makefile文件,编译,执行命令 make

1
make

5)执行安装命令 sudo make install ,查找了一下,文件应该默认安装在了/usr/local/目录下,分别在/usr/local/include 和 /usr/local/lib中找到头文件和库文件。

1
sudo make install

3.编译 libfaac,为ffmpeg 音频编码做准备。

1)源码下载

https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz

2)解压进入文件,我的版本文件名为fdk-acc-2.0.1,执行文件 ./autogen.sh

1
./autogen.sh

3)执行命令 ./configure --enable-shared --prefix=/usr/

1
./configure --enable-shared --prefix=/usr/

4)编译,make

1
make

5) 安装库 sudo make install

1
sudo make install

4.支持cuda硬编解码

1)jetson agx xavier设备刷机时就安装了cuda和cudnn,如果你的设备不是jestson系列,可能需要:首先需要安装驱动,然后安装cuda和cudnn,在网上看到一篇博客,可以参考https://hewei.blog.csdn.net/article/details/81303876

2)下载nvenc的头文件。

https://github.com/FFmpeg/nv-codec-headers

3)下载后解压,进入目录

编译并安装

1
2
make
make install

完成后,在/usr/local/include/路径包含文件ffnvcodec

5.编译ffmpeg

1)官网下载源码,或者从网址 下载,支持h265推落流由可以从我的csdn下载ffmpeg3.4.8源码https://download.csdn.net/download/qfxx_CSDN/13119978

2)这时需要把ffnvcodec.pc的路径加入环境变量中,否则会报错 ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec

export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig"

好吧,我的实际情况是我的还是会报以上错误。因为我尝试编译ffmpeg4.2,由https://superuser.com/questions/1415074/error-cuda-requested-but-not-all-dependencies-are-satisfied-ffnvcodec受到启发,换成版本ffmpeg3.4.8就成功了。

3) ./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-cuda --enable-cuvid --enable-nvenc --disable-programs --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265

4) make

5) sudo make install

5)修改文件/etc/ld.so.conf 内容增加/usr/local/ffmpeg/lib/ ,保存退出。

再输入ldconfig使修改生效。

参考博客:

https://blog.csdn.net/quantum7/article/details/104460115/

https://blog.csdn.net/dongkaiwen48/article/details/102808113

https://blog.csdn.net/A199222/article/details/103233935

https://superuser.com/questions/1415074/error-cuda-requested-but-not-all-dependencies-are-satisfied-ffnvcodec