Jetson Docker 编译 FFmpeg 支持硬解nvmpi和cuvid

0 设备和docker信息

设备为NVIDIA Jetson Xavier NX,jetpack版本为 5.1.1 [L4T 35.3.1]

使用的docker镜像为nvcr.io/nvidia/l4t-ml:r35.2.1-py3,详见https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml

使用下列命令拉取镜像:

bash 复制代码
sudo docker pull nvcr.io/nvidia/l4t-ml:r35.2.1-py3

使用下列命令启动镜像:

bash 复制代码
sudo docker run --runtime nvidia -it nvcr.io/nvidia/l4t-ml:r35.2.1-py3

1. 编译x264、x265

APT安装

bash 复制代码
apt update
apt install libx264-dev libx265-dev

或者按照下面的步骤从源码编译

x264

bash 复制代码
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --prefix=/usr/local --enable-pic --enable-shared
make -j6
make install

x265

bash 复制代码
git clone https://github.com/videolan/x265.git
cd x265/build/linux
./make-Makefiles.bash
make -j6
make install

2. nvmpi硬解支持

bash 复制代码
git clone https://github.com/Keylost/jetson-ffmpeg.git
cd jetson-ffmpeg
mkdir build
cd build
cmake ..
make -j6
make install
ldconfig

3. cuda cuvid硬解支持

bash 复制代码
git clone https://github.com/FFmpeg/nv-codec-headers.git
cd nv-codec-headers
make install

4. 一些依赖

此镜像中缺少pkg-config,会使得ffmpeg的configure过程报错"ERROR: XXXX not found using pkg-config"。

bash 复制代码
apt update
apt install libnuma-dev pkg-config

5. 编译ffmpeg

bash 复制代码
git clone git://source.ffmpeg.org/ffmpeg.git -b release/6.0 --depth=1
cd ffmpeg
wget -O ffmpeg_nvmpi.patch https://github.com/Keylost/jetson-ffmpeg/raw/master/ffmpeg_patches/ffmpeg6.0_nvmpi.patch
git apply ffmpeg_nvmpi.patch

./configure --enable-static --enable-shared --enable-nvmpi --enable-gpl --enable-cuda --enable-cuvid --enable-libx264 --enable-libx265 --prefix=/usr/local/ffmpeg

make -j6
make install

添加环境变量

bash 复制代码
export FFMPEG_HOME=/usr/local/ffmpeg
export PATH=$FFMPEG_HOME/bin:$PATH

可以将上述环境变量写入 ~/.bashrc

6. 验证

bash 复制代码
ffmpeg -codecs

如果出现

libavdevice.so.58: cannot open shared object file: No such file or directory

或者

ffmpeg: symbol lookup error: ffmpeg: undefined symbol: avio_protocol_get_class, version LIBAVFORMAT_58

新建下面的文件

bash 复制代码
vim /etc/ld.so.conf.d/ffmpeg.conf 

在ffmpeg.conf 文件中写入

bash 复制代码
/usr/local/ffmpeg/lib

然后

bash 复制代码
ldconfig

参考资料

  1. jetson agx xavier ffmpeg源码编译支持cuda 编解码h265推拉流
  2. jocover/jetson-ffmpeg
  3. rtmp和http-flv推流及rtsp-server 区别及搭建提示
相关推荐
青春不流名3 小时前
安装nerdctl和buildkitd脚本命令
容器
项目題供诗4 小时前
黑马k8s(九)
云原生·容器·kubernetes
IP管家6 小时前
企业级IP代理解决方案:负载均衡与API接口集成实践
服务器·网络·数据库·网络协议·tcp/ip·容器·负载均衡
宋康6 小时前
Docker 常用命令
docker·容器·eureka
孤的心了不冷7 小时前
【Linux】Linux安装并配置MongoDB
linux·运维·mongodb·容器
意倾城10 小时前
Docker常见命令解读
docker·容器
我没有开挂15 小时前
旧 docker 版本通过 nvkind 搭建虚拟多节点 gpu 集群的坑
运维·docker·容器
小鸡,啄米16 小时前
centos9安装docker 配置docker代理
运维·docker·容器
遇见火星17 小时前
jenkins流水线常规配置教程!
运维·docker·jenkins
LunarCod19 小时前
Ubuntu使用Docker搭建SonarQube企业版(含破解方法)
linux·运维·服务器·ubuntu·docker·开源·sonarqube