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 区别及搭建提示
相关推荐
aqi001 小时前
FFmpeg开发笔记(八十八)基于Compose的国产电视直播开源框架MyTV
android·ffmpeg·音视频·直播·流媒体
present12271 小时前
一段音频/视频分离成人声与伴奏,Windows + Anaconda 快速跑通 Spleeter(离线可用)
windows·职场和发展·ffmpeg·音视频·娱乐·媒体
帅帅梓4 小时前
docker图形化管理
docker·容器·eureka
努力搬砖的咸鱼10 小时前
容器之间怎么通信?Docker 网络全解析
网络·docker·云原生·容器
liming49512 小时前
Ubuntu18.04部署k8s
云原生·容器·kubernetes
fxshy14 小时前
python使用ffmpeg对视频进行转码
python·ffmpeg·音视频
元直数字电路验证14 小时前
ASP.NET Core Web APP(MVC)开发中无法全局配置 NuGet 包,该怎么解?
前端·javascript·ui·docker·asp.net·.net
YC运维14 小时前
Kubernetes资源管理全解析
java·容器·kubernetes
chinesegf16 小时前
Docker篇6-项目app.py和flask_app.service配置和映射到docker中
docker·容器·flask
退役小学生呀16 小时前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton