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 区别及搭建提示
相关推荐
sauTCc9 小时前
Docker初探
docker
用户96715113916729 小时前
Rust 如何轻松实现 RTMP 流媒体推送?深入解析直播推流场景与解决方案
rust·ffmpeg
小小码农Come on9 小时前
ffmpeg命令整理
ffmpeg
云上艺旅9 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
c无序9 小时前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
FixBug_Nick9 小时前
使用Docker安装及使用最新版本的Jenkins
docker·容器·jenkins
暮云星影10 小时前
三、FFmpeg学习笔记
linux·ffmpeg
ghostwritten11 小时前
Run Milvus in Kubernetes with Milvus Operator
容器·kubernetes·milvus
Zero_to_zero123412 小时前
解决docker的ubuntu系统中文乱码问题
ubuntu·docker·容器
@郭小茶12 小时前
docker-compose方式部署docker项目
运维·docker·容器