在jetson中实现ffmpeg调用硬件编解码加速处理

关键词: JETSONFFMPEGCUDANVENCNVDNC

前言

由于实际应用中往往单纯的依靠CPU处理FFMPEG推拉流效率较为低下且在jetson设备中含有硬解码计算单元。(如下图所示:输入 sudo jtop可查看)那么我们可以充分利用jetson设备中的硬编解码计算单元对FFMPEG重新编译。在本文中我将为大家带来如何在jetson设备中重新编译ffmpeg使其可以支持调用硬件编解码。

准备阶段

在这里我们是在NVIDIA Orin NX T808-16GB设备中实现,对于这款设备具体参数可自行到nvidia官网中查询。需要装的ffmpeg版本为6.0版本,nvmpi的支持为Keylost/jetson-ffmpeg。也就是需要大家分别在jetson中通过源码编译安装ffmpeg和jetson-ffmpeg

编译安装jetson-ffmpeg

这里我们选择GitHub中的Keylost的版本,选择该大佬的版本是因为他的里面含有各版本的ffmpeg_nvmpi.patch,方便我们后续编译安装ffmpeg。

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

编译安装ffmpeg

在执行编译安装ffmpeg之前我们需要更新下一些依赖,防止后面编译过程中出现各种错误:

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

如前言中所述,我们选择的ffmpeg6.0版本编译。打开终端中执行如下:

bash 复制代码
git clone git://source.ffmpeg.org/ffmpeg.git -b release/6.0 --depth=1
cd ffmpeg
cp /home/nvidia/jetson-ffmpeg/ffmpeg_patches/ffmpeg6.0_nvmpi.patch /home/nvidia/ffmpeg
mv ffmpeg6.0_nvmpi.patch ffmpeg_nvmpi.patch
git apply ffmpeg_nvmpi.patch
./configure --enable-static --enable-shared --enable-nvmpi --enable-gpl --enable-libx264 --enable-libx265 --prefix=/usr/local/ffmpeg
make -j4
make install

在上述命令执行过程中由于jetson-ffmpeg中含有ffmpeg6.0_nvmpi.patch,所以我们直接cp过来即可,如下载会出现其他各种错误。在执行编译过程中如出现权限不够则更改管理权权限执行也就是在命令之前添加 sudo 即可。

更改环境变量

我们将需要将上面安装的ffmpeg添加到系统变量中:

bash 复制代码
vi ~/.bashrc
source ~/.bashrc
ldconfig

测试

在这里我们采用从本地读取一段视频(input.mp4)进行调用NVDEC与NVENC:

arduino 复制代码
ffmpeg -c:v h264_nvmpi  -i /home/nvidia/input.mp4 -hls_time 10 -hls_list_size 1 -hls_flags delete_segments -f hls index.m3u8

补充

在我们使用编译好的ffmpeg进行编解码的过程中可能出现如下错误:

  我们需要新建一个.conf文件在该conf文件中输入:/usr/local/ffmpeg/lib 然后保存退出后执行ldconfig

新建ffmpeg.conf
bash 复制代码
vim /etc/ld.so.conf.d/ffmpeg.conf
在ffmpeg.conf中输入并保存退出:
bash 复制代码
/usr/local/ffmpeg/lib
在终端中输入:
复制代码
ldconfig
相关推荐
优雅的潮叭1 小时前
c++ 学习笔记之 chrono库
c++·笔记·学习
星火开发设计1 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
月挽清风2 小时前
代码随想录第七天:
数据结构·c++·算法
点云SLAM3 小时前
C++内存泄漏检测之Windows 专用工具(CRT Debug、Dr.Memory)和Linux 专业工具(ASan 、heaptrack)
linux·c++·windows·asan·dr.memory·c++内存泄漏检测·c++内存管理
浅念-3 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
无限进步_5 小时前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
C+-C资深大佬5 小时前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
oioihoii7 小时前
回归测试:软件演进中的质量守护神与实践全指南
c++
十五年专注C++开发7 小时前
CMake基础: 在release模式下生成调试信息的方法
linux·c++·windows·cmake·跨平台构建
点云SLAM8 小时前
C++(C++17/20)最佳工厂写法和SLAM应用综合示例
开发语言·c++·设计模式·c++实战·注册工厂模式·c++大工程系统