【QML】qml+gstreamer显示的同时录像,避免卡顿

1. 问题

使用QML的Camera+videoRecorder(Camera)+VideoOutput实现显示加录像功能。在Ubuntu上运行正常,视频流畅。但是在开发板上(RK3568)上出现明显卡顿,无法正常录像。

2. 解决方案

  • 将摄像头数据通过gstreamer共享内存到某个位置(shmsink
  • qml中使用MediaPlayer显示和保存视频(MediaPlayer可以使用gstreamer命令)

3. 代码

3.1 shell中共享摄像头数据

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=YUY2, width=640, height=480, framerate=30/1 ! videoconvert ! shmsink socket-path=/tmp/foo sync=true wait-for-connection=false shm-size=10000000

3.2 qml代码(显示+存储)

import QtQuick 2.15
import QtQuick.Window 2.15
import QtMultimedia 5.15
import QtQuick.Controls 2.15Window {width: 1000height: 800y: 0visible: truetitle: qsTr("Hello World")Rectangle{id: _mTopwidth: 500height: 600x: 0visible:truecolor: "blue"//显示MediaPlayer{id: gstreamTestsource: "gst-pipeline: shmsrc socket-path=/tmp/foo ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert! autovideosink "Component.onCompleted:{play()}}//录像的输出VideoOutput{width: 500height: 500x: 0fillMode: Image.Stretchvisible: truesource: gstreamTest}}Rectangle{id: _mTop1width: 500height: 600x: 500visible:truecolor: "red"//保存MediaPlayer{id: gstreamTest1source: "gst-pipeline: shmsrc socket-path=/tmp/foo ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert ! avenc_mpeg4 ! filesink location=1.mp4"Component.onCompleted:{play()}}}
}

在这里插入图片描述
在这里插入图片描述

3.3 qml代码(多个窗口显示)

import QtQuick 2.15
import QtQuick.Window 2.15
import QtMultimedia 5.15
import QtQuick.Controls 2.15Window {width: 1000height: 800y: 0visible: truetitle: qsTr("Hello World")Rectangle{id: _mTopwidth: 500height: 600x: 0visible:truecolor: "blue"//显示MediaPlayer{id: gstreamTestsource: "gst-pipeline: shmsrc socket-path=/tmp/foo ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert! autovideosink "Component.onCompleted:{play()}}//录像的输出VideoOutput{width: 500height: 500x: 0fillMode: Image.Stretchvisible: truesource: gstreamTest}}Rectangle{id: _mTop1width: 500height: 600x: 500visible:truecolor: "red"//显示MediaPlayer{id: gstreamTest1source: "gst-pipeline: shmsrc socket-path=/tmp/foo ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert! autovideosink "Component.onCompleted:{play()}}VideoOutput{width: 500height: 500fillMode: Image.Stretchvisible: truesource: gstreamTest1}}
}

在这里插入图片描述

4. 效果

目前在Ubuntu效果不错,开发板中gstreamer缺少插件,安装插件后再测试效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/182721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cddd 安装指南(pip install cddd)

pip install cddd 这个命令可能会报错,因为要求是TensorFlow1.10.0 TensorFlow1.10.0对应的Python版本是3.6,所以如果你的Python版本是3.6以上是不行的.....

PTApt——2023年软件设计综合实践_7(数据结构)

6-1 递增的整数序列链表的插入 本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。 答案: 语言选C(gcc) List Insert(List L, ElementType X) {List tmp (List) mal…

142. 环形链表 II --力扣 --JAVA

题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使…

OpenCV实现手势音量控制

前言: Hello大家好,我是Dream。 今天来学习一下如何使用OpenCV实现手势音量控制,欢迎大家一起前来探讨学习~ 一、需要的库及功能介绍 本次实验需要使用OpenCV和mediapipe库进行手势识别,并利用手势距离控制电脑音量。 导入库&am…

Python内置函数与标准库函数的详细解读

一、内置函数与标准库函数的区分 Python 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要导入某个模块。 Python 解释器也是一个程序,它给用户提供了一些常用功能,并给它们起了独一无二的名字,这些常用功能…

JSP 9大内置对象详解

一、内置对象特点: 1.由JSP规范提供,不用编写者实例化。 2. 通过Web容器实现和管理 3.所有JSP页面均可使用 4.只有在脚本元素的表达式或代码段中才可使用(<%使用内置对象%>或<%使用内置对象%>) 二、常用内置对象: 1.输出输入对象:request对象、response对象、…

C++初阶 | [五] 内存管理

摘要&#xff1a;new and delete&#xff0c;定位new&#xff0c;&#xff08;C内存管理的方式&#xff09;&#xff0c;malloc/free和new/delete的区别&#xff0c;内存泄漏 关于内存&#xff1a; 栈又叫堆栈——非静态局部变量/函数参数/返回值等等&#xff0c;栈是向下增长…

华为OD机试 - 园区参观路径(Java JS Python C)

题目描述 园区某部门举办了Family Day,邀请员工及其家属参加; 将公司园区视为一个矩形,起始园区设置在左上角,终点园区设置在右下角; 家属参观园区时,只能向右和向下园区前进,求从起始园区到终点园区会有多少条不同的参观路径。 输入描述 第一行为园区的长和宽; 后…

Linux详解——安装JDK

目录 一、下载jdk 二、tar包安装 三、rpm包安装 一、下载jdk 1.下载jdk https://www.oracle.com/technetwork/java/javase/downloads/index.html 2.通过CRT|WinSCP工具将jdk上传到linux系统中 二、tar包安装 # 1.将JDK解压缩到指定目录 tar -zxvf jdk-8u171-linux…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-12:内存管理)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

苍穹外卖--查看,删除购物车

代码开发 Controller层 在ShoppingCartController中创建查看购物车的方法&#xff1a; /*** 查看购物车* return*/GetMapping("/list")ApiOperation("查看购物车")public Result<List<ShoppingCart>> list(){return Result.success(shopping…

VituralBox学习

vagrant box add BOX镜像文件位置及名称 --name [文件夹名称] vagrant init 多个 vagrant box add [box文件夹] BOX镜像文件位置及名称 cd [box文件夹] vagrant init [box文件夹] 生成 Vagrantfile vagrant up 启动 修改ssh配置文件并重启服务&#xff1a; cd /etc/ssh…

MyBatis使用教程详解<下>

回顾上一篇博文,我们讲了如何使用注解/XML的方式来操作数据库,实际上,一个Mapper接口的实现,这两种方式是可以并存的. 上一篇博文中,我们演示的都是比较简单的SQL语句,没有设计到复杂的逻辑,本篇博文会讲解复杂SQL的实现及一些细节处理.话不多说,让我们开始吧. 一. #{}和${} …

CLion安装与配置教程

目录 一、下载并安装CLion1、下载1、官网&#xff1a;2、注意&#xff1a; 2、安装1、下载完成后&#xff0c;直接点击安装包安装&#xff0c;即可。2、开始安装&#xff0c;然后下一步3、可以在此处自定义地址&#xff0c;然后下一步4、根据系统版本选择&#xff0c;然后下一步…

springboot 注解@JsonInclude

修饰 实体属性or实体类 //枚举值&#xff1a;ALWAYS,NON_NULL,NON_ABSENT,NON_EMPTY,NON_DEFAULT,CUSTOM,USE_DEFAULTS JsonInclude(Include.NON_EMPTY)//将该标记放在属性上&#xff0c;如果该属性为NULL则不参与序列化 //如果放在类上边,那对这个类的全部属性起作用 Inclu…

java - 冒泡排序

一、什么是冒泡排序 冒泡排序&#xff08;Bubble sort&#xff09;是一种简单的排序算法&#xff0c;其基本思想是通过相邻元素的比较和交换&#xff0c;将较大的元素逐渐交换到序列的一端&#xff0c;从而达到排序的目的。 具体步骤如下&#xff1a; 从序列的第一个元素开始&a…

WPF-本地保存登录账号密码

一、更新/写入账户和密码 /// <summary> /// 更新设置 /// </summary> /// <param name"settingName"></param> /// <param name"valueName"></param> public static void U…

智慧工地信息化管理系统源码带APP

需求痛点&#xff1a;建筑行业是一个安全事故多发的行业。目前&#xff0c;工程建设规模不断扩大&#xff0c;工艺流程纷繁复杂&#xff0c;如何搞好现场施工现场管理&#xff0c;控制事故发生频率&#xff0c;一直是施工企业、政府管理部门关注的焦点。利用现代科技&#xff0…

[Python程序打包: 使用PyInstaller制作单文件exe以及打包GUI程序详解]

文章目录 概要Python 程序打包—使用 Pyinstaller 打包 exePython程序打包—使用Pyinstaller打包GUI程序Python程序打包—使用 Pyinstaller 设置 exe 图标小结 概要 使用PyInstaller工具将Python程序打包成可执行&#xff08;EXE&#xff09;文件。将Python程序打包成EXE的好处…

【产品设计】SaaS产品数据分析之指标与标签

数据分析能够应用到各个领域和岗位&#xff0c;那么在SaaS产品中的应用会是如何&#xff1f;本文将探索SaaS产品在数据分析中的应用&#xff0c;并对其指标与标签的设计进行总结分析&#xff0c;一起来看看吧。 数据分析是业务开展过程中&#xff0c;收集记录各种行为产生的数据…