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

2023-09-21 10:38:06

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

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

瑞芯微开发专栏

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


前言

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


Demo

  请添加图片描述


补充

  得益于方案上的buildroot已经移植了ffmpeg4.1.3。
  在这里插入图片描述


摄像头的硬件连接

  在这里插入图片描述

  编译ffmpeg4.1.3
  在这里插入图片描述

  程序移植过程中,发现默认的ffmpge缺少了swscale.h,这就很不好办了:
  在这里插入图片描述

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

步骤一:下载解压

  http://ffmpeg.org/releases/
  在这里插入图片描述
  解压:
  在这里插入图片描述

步骤二:配置configure

  引入交叉编译器
  在这里插入图片描述

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

  在这里插入图片描述

步骤三:编译make

make -j4

  在这里插入图片描述

步骤四:安装make install

make install

   在这里插入图片描述

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

  在这里插入图片描述

  但是编译发现还是不行:
  在这里插入图片描述

  忍不了了,重新提取一套完整的直接单独给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代码里面去:
  在这里插入图片描述

  弄到代码模块里面:
  在这里插入图片描述

  添加pri依赖:
  在这里插入图片描述

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

  在这里插入图片描述

  编译通过:
  在这里插入图片描述

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

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

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

  因为sftp限制了/root目录下,所以直接打包,到开发板上手动copy覆盖:
  在这里插入图片描述

  拷贝到开发板:
  在这里插入图片描述

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

  然后运行:
  在这里插入图片描述

  成功了,看界面:
  在这里插入图片描述


开始测试软解码rtsp

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

  然后开始软解码rtsp播放:
  在这里插入图片描述

  播放1s追加多慢1s,越来越慢,然后灰色了又重新开始:
  在这里插入图片描述

  查看cpu,解码1080p直接cpu爆了几个:
  在这里插入图片描述

  这个方式行不通。

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

  切换至子码流:
  在这里插入图片描述

  延迟大概1s-1.5s
  在这里插入图片描述

  如下:
  在这里插入图片描述

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


小结

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


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


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

更多推荐

外贸行业中常用的邮箱推荐

随着全球贸易的不断发展,外贸行业越来越重要。在这个过程中,电子邮件作为一种重要的沟通工具,扮演着关键的角色。然而,对于许多外贸从业者来说,选择合适的邮箱服务并不容易。本文将探讨外贸邮箱和普通邮箱的区别,并推荐一些在外贸行业中广泛使用的好用邮箱。“有哪些好用的外贸行业使用较多的邮箱?常见的有ZohoMail、Gmail、

RxJS:前端开发的未来

引言随着前端开发的不断发展,我们面临着越来越复杂的应用程序和更高的用户期望。为了应对这些挑战,开发人员需要使用更高效、更灵活的工具和技术。RxJS(ReactiveExtensionsforJavaScript)是一个强大的库,它提供了一种响应式编程的方式来处理异步数据流。本文将探讨RxJS在前端开发中的重要性,并展示

day1---9.15---qt

头文件:#ifndefZY1_H#defineZY1_H//防止文件重复包含#include<QMainWindow>//父类的头文件classzy1:publicQMainWindow//自定义自己的界面类,公共继承自QWidget,父类中重写了绘制事件处理函数{Q_OBJECT//信号与槽的元对象,没有这个对象,信

基于springboot实现“闲一品”交易平台电商系统项目【项目源码+论文说明】分享

基于springboot实现“闲一品”交易平台电商系统项目摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统。整

TCP/IP协议栈的心跳、丢包重传、连接超时机制实例详解

大家好,本文结合具体的问题实例,详细讲解一下TCP/IP协议栈的心跳机制、丢包重传机制等内容,给大家提供一个借鉴和参考。1、问题概述虽然软件底层模块在网络恢复后能自动重连上服务器,但会议因为网络问题已经退出,需要重新加入会议。因为客户特殊的网络运行环境,会频繁出现网络抖动不稳定的情况,客户要求必须要实现60秒内网络恢复

【100天精通Python】Day63:Python可视化_Matplotlib绘制子图,子图网格布局属性设置等示例+代码

目录1基本子图绘制示例2子图网格布局3调整子图的尺寸4多行多列的子图布局5子图之间的共享轴6绘制多个子图类型7实战:绘制一个大图,里面包含6个不同类别的子图,不均匀布局。绘制子图(subplots)是在Matplotlib中创建多个子图的常见任务。通过子图,您可以将多个图形放置在同一图表中,以便比较不同的数据或可视化多

sublime编辑latex 出现参考文献无法编译报错:citation “...” undefined

问题描述使用sublime编译latex文件时,参考文献按照常规的方式放好,ctrl+B编译的时候,显示找不到参考文献,编译出的pdf文件也没有references:但是把文件放到overleaf上就可以直接编译出来,说明是本地编译器的问题。解决方案1.编辑LaTeXTools插件的编译脚本我电脑的路径为C:\User

生产数据追溯产线管理看板助力企业实现产品质量追踪

在现代制造业中,企业对于产品质量的追踪和管理变得越来越重要。产品质量的好坏直接关系到企业的声誉和客户满意度。然而,传统的生产管理方式往往无法提供足够的数据和信息来进行全面的质量追踪。生产看板管理系统的出现为企业解决了这一难题。通过实时的数据采集和分析,企业可以追溯每个产品的生产过程,了解每个环节的质量控制情况。这些数据

攻防世界-web-easyphp

1.题目描述打开链接,可以看到如下代码2.思路分析代码都给出来了,接下来就是理解代码的含义了,从代码中不难发现,总共传入三个参数a,b,c,分别需要满足以下条件:2.1a的长度小于等于3,但是转换成int后需要大于60000002.2对b计算md5值,md5的一部分为’8b184b’2.3c是一个json对象,其中c[

7-1_MSPI_NANDFLASH SDK例程详解

1.代码示例路径PRJ_M66_4.3.3\boards\apollo4l_blue_eb\examples\interfaces\mspi_ds35x1ga_quad_example\src\mspi_ds35x1ga_quad_example.c本文中主要讲解初始化流程内容2.MSPI通信示意图SCK(Serial

JavaScript系列从入门到精通系列第四篇:JavaScript基本语法(二)

文章目录前言一:Number类型1:字符串与Number类型2:检查数据类型3:Number最大值4:Number四则运算精确性二:布尔值1:布尔值数量2:布尔值类型查看三:Null和Undefined1:Null类型2:null值意义3:Undefined前言varstr="123";varstr="456";这么些

热文推荐