最近在用Jetson Xavier NX板子做视频处理,但是CPU进行视频编解码,效率比较地下。
于是便考虑用硬解码来对视频进行处理。
通过jtop查看,发现板子是支持 NVENC硬件编解码的。
1、下载源码
因为需要对ffmpeg进行打补丁修改,因此需要编译两份源码
1.1、编译jetson-ffmpeg
1)、下载jetson-ffmpeg (GitHub - jocover/jetson-ffmpeg: ffmpeg support on jetson nanohttps://github.com/Keylost/jetson-ffmpegGitHub - jocover/jetson-ffmpeg: ffmpeg support on jetson nano) 源码
2)、 编译jetson-ffmpeg
下载后,依次执行如下命令进行编译
cd jetson-ffmpeg
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
1.2、编译ffmpeg
1)、下载ffmpeg源码
本博文 以 4.2版本为例
git clone git://source.ffmpeg.org/ffmpeg.git -b release/4.2 --depth=1
2)、下载patch补丁
网络上不少提示补丁地址
https://github.com/Keylost/jetson-ffmpeg/raw/master/ffmpeg_patches/ffmpeg4.2_nvmpi.patch
但是我执行,报错。
最后发现,在jetson-ffmpeg下面就有相应的patch版本
ll ffmpeg_patches/
total 116
drwxr-xr-x 2 root root 4096 10月 30 19:11 ./
drwxr-xr-x 8 root root 4096 10月 30 19:11 ../
-rw-r--r-- 1 root root 34433 10月 30 19:11 ffmpeg4.2_nvmpi.patch
-rw-r--r-- 1 root root 34216 10月 30 19:11 ffmpeg4.4_nvmpi.patch
-rw-r--r-- 1 root root 34497 10月 30 19:11 ffmpeg6.0_nvmpi.patch
将 对应的 ffmpeg4.2_nvmpi.patch 拷贝到ffmpeg目录下
3)、升级补丁
执行如下命令进行补丁升级4
git apply ffmpeg4.2_nvmpi.patch
ffmpeg4.2_nvmpi.patch:249: trailing whitespace.ffmpeg4.2_nvmpi.patch:271: trailing whitespace.ffmpeg4.2_nvmpi.patch:351: trailing whitespace.ffmpeg4.2_nvmpi.patch:353: trailing whitespace.ffmpeg4.2_nvmpi.patch:359: trailing whitespace.warning: squelched 21 whitespace errors
warning: 26 lines add whitespace errors.
4)、编译ffmpeg
配置
mkdir build
cd build/
../configure --prefix=../ffmpeg_install
编译
make
make install
编译完成。
2、测试
执行如下命令,即可以使用硬编码
ffmpeg -c:v h264_nvmpi -rtsp_transport tcp -i rtsp -hls_time 10 -hls_list_size 1 -hls_flags delete_segments -f hls index.m3u8
运行jtop 查看
已经调动了硬编码与硬解码