ffmpeg使用NVIDIA Jeston Xavier NX 硬编码

一,需求

NX的板子外接相机,使用opencv从共享内存中取图 转化成Mat,之后利用ffmpeg进行h264编码,然后推送到rtmp服务器。开始使用cpu软编码,占用cpu在150%左右。先改用GPU的 NVENC芯片进行硬编码,cpu占用降到了80%。

二,实现

环境搭建:

(1),libnvmpi安装

​
git clone GitHub - jocover/jetson-ffmpeg: ffmpeg support on jetson nano

cd jetson-ffmpeg

mkdir build

cd build

cmake ..

make

sudo make install

sudo ldconfig

​

备注:需要修改 CMakeList.txt 中jetson_multimedia_api  引用的位置,如  /usr/environment/jetson_multimedia_api 。

(2),x264软编码器安装

git clone https://gitee.com/mirrors/x264/tree/stable/
./configure --enable-static --enable-shared --enable-debug --prefix=./bin
make
make install

(3),ffmpeg安装

1,下载 源码:git clone git://source.ffmpeg.org/ffmpeg.git -b release/4.2 --depth=1
cd ffmpeg
2,下载 补丁文件:https://github.com/jocover/jetson-ffmpeg/blob/master/ffmpeg_nvmpi.patch
3,打补丁:git apply ffmpeg_nvmpi.patch
4,配置编译选项:./configure --enable-shared --enable-static  --enable-libx264  --enable-gpl      --enable-nvmpi --prefix=./bin
5,编译:  make
6,安装:  make install

备注:x264 和ffmpeg 都安装到了当前的bin 路径下,之后在将bin中的内容拷贝到/usr/local/下使用。 并且都生成了静态库。

使用:

CMakeLists.txt 中 引用静态库,注意库的引用顺序:

target_link_libraries(${TARGET_NAME} PRIVATE   libavformat.a libavcodec.a libx264.a libnvmpi.a  libavfilter.a  libavutil.a libavdevice.a  libswscale.a libswresample.a )

代码部分:

AVCodec* videoCodec = avcodec_find_encoder_by_name("h264_nvmpi");
if (!videoCodec) {
      cout << "InitVideoCodec 获取编码器出错" << endl;
      return false;
}
// 创建编码器上下文
 videoCodecContext = avcodec_alloc_context3(videoCodec);
 if (!videoCodecContext) {
       cout << "InitVideoCodec 获取编码器上下文出错" << endl;
       return false;
 }

 参考:GitHub - jocover/jetson-ffmpeg: ffmpeg support on jetson nano

Jetson Linux API Reference: 01_video_encode (video encode) | NVIDIA Docs

  • 0
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

土拨鼠不是老鼠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值