RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133022813

红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

瑞芯微开发专栏

上一篇:《RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示》
下一篇:敬请期待…


前言

  目标开发任务还有个功能,就是播放rtsp摄像头,当然为了更好的坐这个个,我们必须支持rtsp播放失败之后重新尝试,比如5s重新尝试打开一次,从而保障联网后重新打开,然后达成这个功能。


Demo

  


补充

  得益于方案上的buildroot已经移植了ffmpeg4.1.3。
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第1张图片


摄像头的硬件连接

  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第2张图片


编译ffmpeg4.1.3

  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第3张图片

  程序移植过程中,发现默认的ffmpge缺少了swscale.h,这就很不好办了:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第4张图片

  想了个打补丁的办法,交叉编译ffmpeg4.1.3给他再打上一次。

步骤一:下载解压

  http://ffmpeg.org/releases/
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第5张图片
  解压:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第6张图片

步骤二:配置configure

  引入交叉编译器
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第7张图片

export PATH=$PATH:/home/yang/work/src/topeet-qt5.14.2/topeet-qt5.14.2-aarch64/host/bin

  调整配置,如下:

./configure --prefix=/home/yang/work/src/topeet-qt5.14.2/topeet-qt5.14.2-aarch64/host/aarch64-buildroot-linux-gnu/sysroot --arch=aarch64  --target-os=linux  --enable-cross-compile --cross-prefix=aarch64-buildroot-linux-gnu- --enable-shared

  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第8张图片

步骤三:编译make

make -j4

  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第9张图片

步骤四:安装make install

make install

   RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第10张图片

步骤五:检查libswsale图像缩放变换模块:

  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第11张图片

  但是编译发现还是不行:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第12张图片

  忍不了了,重新提取一套完整的直接单独给Qt工程依赖:
  注意修改了prefix地址:

./configure --prefix=/home/yang/work/src/ffmpeg-aarch64 --arch=aarch64  --target-os=linux  --enable-cross-compile --cross-prefix=aarch64-buildroot-linux-gnu- --enable-shared

  重走一遍,单独弄到ffmpeg代码里面去:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第13张图片

  弄到代码模块里面:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第14张图片

  添加pri依赖:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第15张图片

  编译,这回没出现头文件错误,出现了新错误:
  在这里插入图片描述

  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第16张图片

  编译通过:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第17张图片

  编译依赖解决了:
  在这里插入图片描述

步骤六:将ffmpeg4.1.2覆盖一遍开发板的ffmpeg

  还得将新库覆盖过去,不然出现如下:
  在这里插入图片描述

  因为sftp限制了/root目录下,所以直接打包,到开发板上手动copy覆盖:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第18张图片

  拷贝到开发板:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第19张图片

  这里其实不用头文件了,目标板不做编译的话,无需头文件,直接将lib解压后,然后copy文件夹里面的所有到/usr/lib即可,如下图:
  在这里插入图片描述

  然后运行:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第20张图片

  成功了,看界面:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第21张图片


开始测试软解码rtsp

Ffmpeg拉取rtsp软解h364显示(1080p)

  然后开始软解码rtsp播放:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第22张图片

  播放1s追加多慢1s,越来越慢,然后灰色了又重新开始:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第23张图片

  查看cpu,解码1080p直接cpu爆了几个:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第24张图片

  这个方式行不通。

Ffmpeg拉去rtsp软解h364显示360p(640x360)

  切换至子码流:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第25张图片

  延迟大概1s-1.5s
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第26张图片

  如下:
  RK3568开发笔记(十一):开发版buildroot固件移植一个ffmpeg播放rtsp的播放器Demo_第27张图片

  然后测试了打开了2个解码,延迟基本没影响,然后跑应用解码50ms一阵数据交互,都没啥问题,所以这个能先给演示凑合了。


小结

  本次基本达成目标了,同时也测出rk一类能bsp使用mpp拉取rtsp解码h264包成为rgba直接刷buffer层是延迟最低,最低消耗cpu的方式,也可以给qt显示,多消耗一点延迟,应该是多10~30ms的样子,具体需要测试实际结果。


上一篇:《RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示》
下一篇:敬请期待…


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133022813

你可能感兴趣的:(Qt开发,瑞芯微开发,ffmpeg,RK3568,软解码,ffmpeg移植,rk3568播放rtsp)