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

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

前言

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

             image.png

准备阶段

  在这里我们是在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

   image.png

编译安装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 即可。

image.png

更改环境变量

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

bash

复制代码

vi ~/.bashrc
source ~/.bashrc
ldconfig

image.png

测试

  在这里我们采用从本地读取一段视频(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

image.png

补充

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

image.png   

我们需要新建一个.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


相关文章
|
2月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
323 4
|
2月前
|
存储 编解码 vr&ar
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
313 0
|
11月前
|
编解码 Linux 计算机视觉
ffmpeg硬编解码 Inter QSV
ffmpeg硬编解码 Inter QSV
510 0
|
10天前
|
存储 编解码 容器
FFmpeg avformat_open_input() 函数返回错误protocol not found解决方法(实测有效!附简单FFMPEG的编解码流程)
我个人出现这个错误的时候是在打开文件时报的错误,开始以为我需要加上资源文件,那样QT确实能检测到文件的存在,但是在Debug中他是检测不到这个文件的。
|
1月前
|
Linux 编解码 Python
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
AV1是一种高效免费的视频编码标准,由AOM联盟制定,相比H.265压缩率提升约27%。各大流媒体平台倾向使用AV1。本文介绍了如何在Linux环境下为FFmpeg集成AV1编解码库libaom、libdav1d和libsvtav1。涉及下载源码、配置、编译和安装步骤,包括设置环境变量以启用这三个库。
64 3
FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器
|
2月前
|
存储 编解码 缓存
【ffmpeg 移动视频流位置】深入理解FFmpeg:精细探讨seek操作和编解码上下文
【ffmpeg 移动视频流位置】深入理解FFmpeg:精细探讨seek操作和编解码上下文
111 0
|
11月前
|
编解码 并行计算 计算机视觉
ffmpeg硬件编解码Nvidia GPU
ffmpeg硬件编解码Nvidia GPU
492 0
|
编解码 并行计算 开发工具
FFmpeg引入NVIDIA硬件编解码扩展
FFmpeg引入NVIDIA硬件编解码扩展
709 0
|
编解码 并行计算 Linux
LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
LINUX下,ffmpeg增加NVIDIA硬件编解码的步骤及解决办法
498 0
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(六)
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(六)
488 0
【FFmpeg】ffmpeg 命令查询一 ( 版本 | 编译配置 | 复用格式 | 编解码器 )(六)