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 区别及搭建提示
相关推荐
Joren的学习记录6 小时前
【Linux运维大神系列】docker详解(四)
linux·运维·docker
louqle8 小时前
docker基本知识及常用命令汇总
运维·docker·容器
叫致寒吧8 小时前
Docker
运维·docker·容器
杨浦老苏8 小时前
现代流媒体聚合播放器冬瓜TV MAX
docker·群晖·多媒体
l1t10 小时前
用docker安装oracle 19c
运维·数据库·docker·oracle·容器
weixin_4624462311 小时前
【原创实践】Docker 镜像批量导出镜像与导入镜像
运维·docker·容器
qq75903536611 小时前
Docker快速部署一款堡垒机系统
运维·docker·容器
zz-zjx11 小时前
Kubernetes 的部署方式 (二)通过 kubeasz部署单机版1.34.1
云原生·容器·kubernetes
是小崔啊13 小时前
叩丁狼k8s - 组件篇
云原生·容器·kubernetes
天下不喵13 小时前
python项目部署之pytandic与.env的使用教程
python·docker