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 区别及搭建提示
相关推荐
vipxieliang3 小时前
Docker vs Podman vs containerd:容器运行时全景
docker·容器
vipxieliang3 小时前
数据持久化方案:卷、挂载、权限与备份恢复
docker·容器
vipxieliang3 小时前
Compose 生产级配置:从 demo 到可上线
docker
vipxieliang3 小时前
容器原理揭秘:namespace、cgroup 与镜像分层
docker·容器
wzq11_6664 小时前
Kubernetes集群——基础篇(基础知识与搭建步骤一遍过!!!)
java·容器·kubernetes
java_logo6 小时前
Docker 部署 dockurr/windows:轻松搭建浏览器可控 Windows 虚拟机
运维·windows·docker·容器·虚拟机·kvm·轩辕镜像
谢亮_vipxieliang7 小时前
私有镜像仓库:Registry、Harbor 与镜像同步实战
网络·docker·容器
VidDown8 小时前
从一堆脚本到能维护的系统:视频处理管道的工程化
服务器·ffmpeg·音视频·视频编解码
努力努力再努力wz8 小时前
【边缘计算入门系列】从“在哪里算”到“怎么算”:一文建立边缘计算、算子、计算图与 Tensor 的底层心智模型
人工智能·docker·边缘计算
江湖有缘8 小时前
3款开源IT工具箱整理合集,可Docker一键部署!
docker·容器·开源