Gstreamer与OPENCV交互中的APPSINK问题

OpenCV运行gstreamer管道获取相机数据,处理以后,再交给gstreamer显示(QT实现) 阅读详情

项目中使用appsink获取实时视频流,并将获取到的数据转入OPENCV进行处理(在此使用imshow显示)。

appsink使用new-sample信号获取帧数据,使用中发现问题:

在获取到995或者996帧的时候,遇到map.data==NULL的情况,但是显示线程还是正常显示,只是图像有拖影,就像是CPU占用过高时图像处理不及时一样,暂时未找出原因。

2020-02-25更新

由于一直是在获取到995左右出问题,判断大概是因为1000的帧限制,因为appsink中有个参数:max-size-time,默认值为:1000.曾经信尝试将此参数设置为2000,还是出现一样的问题。有怀疑过是内存限制问题,但是通过top实时查看内存占用情况,整个过程中并没有超过80%的占用率。

查看gstreamer的源码,看到gst_buffer_map方法中有调试信息GST_DEBUG_OBJECT输出,因此通过使用--gst-debug=appsink:5,fdmemory:5参数查看调试信息(在此使用appsink和fdmemory是使用--gst-debug-level=5对所有日志信息进行查看,估计是这两个组件出的问题,用这两个参数是把其他不必要的信息排除,方便查看),发现出问题的时候,是gstfdmemory.c中先出:fd:-1 maped(nil)信息。在 此确定应该是内存不足的问题,但是前面使用top查看实时内存占用情况时,又没有发现内存不足问题(好纠结啊……)。重新整理思路后发现,程序中使用的是rkisp这个源,显示也是使用rkximagesink,正常显示时CPU占用很少,因为整个过程中使用的是硬件资源进行处理,或许在此过程中,内存占用不是我们看到的常规内存空间,而是像fdm(应该是这个,或者是dma)这样的内存空间。然后就出现1000frame的空间将此内存空间耗尽,所以每次都在固定的995左右出问题。

 

解决方法:appsink的参数max-size-time设置为500,程序正常运行,跑了2个小时,帧数到1W6以上,视频正常,程序正常。

总结:问题出现的时候,就初步判断应该是内存问题(因为都是在995左右出问题,条件太明显),但是显示线程又一直工作,而且使用top查看内存占用又正常,这影响了决断。最初虽然定位到了max-size-time这个参数,但是并没有往小的方面想,而是想着扩大这个参数。

学到的内容:

1、学会使用--gst-debug-level和--gst-deubg=name:level将组件中的debug信息输出。

2、在Linux中使用script -a *.txt加exit将terminal中显示的内容保存到*.txt中。

3、硬件资源组件使用的资源空间不是常规资源空间,使用常规命令并不能查看到资源使用情况。

 

附上我使用的平台:

硬件:rk3399 NEO 4, 1G, 16G

系统:friendly ElEC(Linux NanoPi - NEO4 4.4.167)

摄像头:130W MIPI CSI摄像头

gstreamer-基础教程8-appsrc和appsink的应用 在appsrc上,需要设置的第一个属性appsrc是caps,它指定元素将要生成的数据类型,因此 GStreamer 可以检查是否可以与下游元素链接(也就是说,下游元素是否会理解这种数据)。这个教程通过appsrc元素,将应用程序数据注入 GStreamer 管道,并且使用appsink元素将 GStreamer 数据提取回应用程序。文件有哪些,比如用gstreamer最近的版本编译的pc文件有下面这么多,那么都可以通过pkg-config命令查到。如何将外部数据注入通用 GStreamer 管道。.... 阅读详情

相关推荐

Gstreamer中,appsink、appsrc、fakesink与第三方交互

Gstreamer中,appsink、appsrc、fakesink与第三方交互

Alon1787的博客 2604

appsink的功能

通常方法: gst_app_sink_pull_sample(), gst_app_sink_pull_preroll() gst_app_sink_pull_preroll(),gst_app_sink_pull_preroll() max-buffers 属性  限制buffer size !!!  If the application is not pulling samples fast ...

qq_23350817的博客 2702

GStreamer appsink实战:从RTSP流到JPG截图,一个管道搞定预览与抓图

本文详细介绍了如何利用GStreamer的appsink组件实现从RTSP流到JPG截图的完整解决方案。通过精心设计的管道架构和appsink配置,开发者可以同时实现视频流的实时预览和高效抓图功能,适用于监控系统、视频分析等多种场景。文章还提供了帧数据处理、图像格式转换等实战技巧,帮助优化性能并解决常见问题。

weixin_30420305的博客 335

【gstreamer】gstreamer-appsink元素的使用

appsink的功能 extract samples from a pipeline use a queue to collect buffers from the streaming thread 简单的说 appsink 元素作为gstreamer的sink节点,它可以实现pipeline中的流媒体数据与其他应用程序的交换,比如实现gstreamer与CUDA交互,gstreamer与Open...

qq_43248127的博客 2973

【gstreamer opencv::Mat】使用gstreamer读取摄像头的每一帧画面为cv::Mat图片,Windows VS2022 C++ 项目环境下 GStreamer 与 OpenCV

本文介绍了在Windows VS2022 C++环境下,使用GStreamer获取无线摄像头RTSP视频流(rtsp://192.168.31.221:554/main_stream)并进行实时处理的方案。代码通过GStreamer构建双路视频处理管道:一路通过autovideosink直接显示画面,另一路通过appsink将视频帧转换为OpenCV的Mat格式进行二次处理和显示。关键实现包括:1)使用decodebin自动解码视频流;2)通过tee分流器实现画面多路复用;3)采用OpenCV进行图像处理与

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1165

Windows下VS2022+GStreamer+OpenCV实时RTSP流处理:从零搭建高效视频分析管道

本文详细指导在Windows平台下,使用Visual Studio 2022集成GStreamer与OpenCV,从零构建高性能实时RTSP视频流分析管道。内容涵盖环境配置、核心架构设计、多线程优化及硬件解码实战,旨在解决高分辨率流处理中的卡顿与延迟问题,为工业检测与智能分析应用提供稳定高效的开发方案。

pz890123的博客 912

告别BGRx烦恼:用GStreamer Appsink在Qt中轻松获取RGB格式的RTSP视频帧

本文详细介绍了如何利用GStreamer的appsink元素在Qt应用中轻松获取RGB格式的RTSP视频帧,解决了传统BGRx格式与Qt图像处理类不兼容的问题。通过构建优化的GStreamer管道和正确配置appsink,开发者可以直接获取Qt友好的RGB帧数据,提升开发效率和性能。文章还涵盖了帧数据处理、性能优化及常见问题解决方案。

weixin_30727835的博客 445

GStreamer appsink实战:除了截图,如何用‘new-sample’信号玩转RTSP帧数据分析与保存?

本文深入探讨了GStreamer appsink组件在RTSP帧数据处理中的高级应用,通过`new-sample`信号机制实现实时分析、智能检测和质量评估。文章详细介绍了appsink的核心优势、数据流生命周期管理,以及如何构建高效的分析管道框架,帮助开发者超越基础截图功能,解锁RTSP帧数据的无限可能。

weixin_30568591的博客 326

【gstreamer opencv::Mat】使用gstreamer读取视频中的每一帧为cv::Mat

序言 需求:读取视频中每一帧,通过gstreamer的插件转换成cv::Mat,并且实现调用一次read函数,读取一次frame。 分析:gstreamer中的数据是在叫做pipeline(管道)中流动,最后流到sink中,sink包括显示设备videosink,文件filesink,虚拟设备appsink。其中appsink能够实现将管道中的数据取出,拷贝给外层的其他app应用,即我们的主程序中cv::Mat变量。 实现 gstreamer流程图如图所示: 以下代码以通过测试,运行sudo ./Vi

weixin_44495869的博客 8463

【GStreamer OpenCV】Windows VS2022 C++环境下实现RTSP视频流硬解码与OpenCV高效处理

本文详细介绍了在Windows VS2022 C++环境下使用GStreamer和OpenCV实现RTSP视频流硬解码与高效处理的完整方案。从环境搭建、硬件解码优化到OpenCV多线程处理框架,提供了实战代码示例和性能调优技巧,帮助开发者快速实现低延迟、高吞吐的视频处理系统。

weixin_30879169的博客 382

基于OpenCV与GStreamer的CUDA加速视频处理实战指南

本文详细介绍了如何利用OpenCV与GStreamer结合CUDA加速技术实现高效视频处理。从环境搭建、OpenCV编译到GStreamer硬解码和CUDA加速技巧,提供了完整的实战指南和优化方案,帮助开发者显著提升视频处理性能,适用于智能交通、视频直播等高需求场景。

weixin_28840591的博客 208

Deepstream 之 appsink元素保存图片

目录 1. appsink元素介绍 2. appsink 元素结合cv::Mat保存图片 2.1 开发环境 2.2 软件代码与说明 1. appsink元素介绍 appsink 元素作为gstreamer的sink节点,它可以实现pipeline中的流媒体数据与其他应用程序的交换,比如实现gstreamer与CUDA交互,gstreamer与OpenCV交互,等等。 主要作用是借助gstreamer pipeline的 media streaming, 我们通过appsink用一个buffer

m_wordPlan的博客 4369

GStreamer RTSP拉流与帧处理

本文介绍如何使用GStreamer通过appsink从RTSP流中稳定拉取视频并获取解码后的帧数据,适用于预览、截图和AI分析。重点涵盖管道构建、参数调优、硬件解码及常见问题规避,提升系统实时性与稳定性。

lilh34434的博客 1557

gstreamer-appsink元素的使用&与opencv交互的示例

appsink的功能 extract samples from a pipeline use a queue to collect buffers from the streaming thread 简单的说 appsink 元素作为gstreamer的sink节点,它可以实现pipeline中的流媒体数据与其他应用程序的交换,比如实现gstreamer与CUDA交互,gstr...

一米阳光 5658

gstreamer 拉流rtsp使用appsink获取帧数据(预览+截图)

利用gstreamer框架拉流rtsp视频,经过tee分为两路分别用来显示预览和appsink采集图像帧。能帮助刚入门gstreamer更好的理解该框架的使用原理。

爬取二手房数据:Python爬虫+Geopy实战,看透房价与地理位置的隐藏关系

哪些区域单价虚高(房源少但单价远高于周边);哪些小区性价比高(靠近地铁/学校,单价低于同地段平均水平);房价与地理位置的量化关系(如距离地铁每远1公里,单价下降多少)。如果想扩展分析范围,可爬取多个城市/区域的数据,对比不同城市的房价差异;或结合时间维度(定期爬取),分析房价的涨跌趋势。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 949

GStreamer appsink实战:从RTSP流到JPG截图,一个回调函数搞定预览与抓图

本文详细介绍了如何使用GStreamer的appsink组件从RTSP流中高效截取JPG图像。通过构建最小化管道和实现核心回调函数,开发者可以轻松完成视频帧数据的提取与保存,适用于监控分析、内容审核等多种场景。文章还提供了性能优化技巧和常见问题解决方案,帮助提升开发效率。

weixin_30908103的博客 414

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4589

告别BGRx烦恼:在Qt中用GStreamer appsink轻松获取RGB帧(附完整代码)

本文详细介绍了在Qt应用中通过GStreamer的appsink组件直接获取RGB帧数据的方法,解决了传统probe方式在格式转换和性能上的痛点。文章提供了完整的代码示例和配置技巧,帮助开发者高效处理RTSP视频流,实现从采样到QImage的无损转换,适用于实时视频分析和截图等应用场景。

weixin_30596343的博客 994

使用TinyProxy搭建代理服务器

背景 办公电脑所在网络无法连接外网,机房服务器可以连接外网,通过服务器代理上网; 一、CentOS下TinyProxy安装–搭建代理服务器 TinyProxy是个轻量级简单的HTTP/HTTPS代理程序,GitHub和官网,安装方式这里主要介绍两种 CentOS下yum安装,参考:TinyProxy安装 Docker安装 先安装docker环境yum install docker -y 二、Win10下使用 ...

椰汁菠萝 1万+

ndnSIM学习笔记(一)

在接下来的一段时间要用ndnSIM来做自己的仿真网络,需要系统的学习相关内容,以下为内容记录。1.安装      1.1核心依赖(必需的)             • python >= 2.6             • libsqlite3             • libcrypto++             • pkg-config             • Boost lib...

gaonjzzz的博客 2985
上一篇: 控制filesink录制
下一篇: RK3399上实现视频(MIPI CSI)摄像头获取转至OPENCV
Cubar
博客等级 码龄20年 53粉丝 35原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值