qt5 qml流视频的传输,实现klipper监控图像的外传

klipper监控图像外传

技术路径

局域网内流数据传输。
外网,搭建服务器,帧数据传输。
外网流数据传输很贵。

moonraker

需要在在moonraker.conf里定义摄像头的配置和url,才能通过ip:/192.168.1.122/webcam/?action=stream读取到摄像头画面,然后可以传输mjpeg流。
至此,在qml可以通过双image定时缓冲法,进行帧数据传输,效果凑合,一卡一卡的。
也可以通过videooutput进行流数据传输,但是延迟居高不下。
webengine可以完美实现这个功能,但是其商用需付费,因此得自行复刻。

实现过程及代码

技术路径

① 已知摄像头传递的画面的ip地址"http://192.168.2.2/webcam/?action=stream"
[CameraManagerModel] C++后端通过QUrl,QNetworkAccessManager,QNetworkReply拉去流数据,
[ImageProvider] 再通过QQuickImageProvider将帧画面实时刷新到qml前端。
刷新数据很快。

github地址

https://github.com/Vaticann/QQuickImageProvider_test_qml.git

CameraManagermodel的代码展示如下

cameramanagermodel.h

#ifndef CAMERAMANAGERMODEL_H
#define CAMERAMANAGERMODEL_H

#include <mutex>
#include <QObject>
#include <QTimer>
#include <QDebug>


// 复刻webengine添加的
#include <QImage>
#include <QUrl>
#include <QNetworkAccessManager>
#include <QNetworkReply>

/////// 新model必有

class CameraManagerModel: public QObject  //, public KeyboardCaller   // 热床需要键盘
{
   
   
    Q_OBJECT // 宏 必须单独放在类定义的最前面,宏会生成元对象代码(如信号、槽、属性等),
             // 这些代码需要在类定义的最前面插入,不能和其他成员混在一起。
public:
    static CameraManagerModel &instance()    // 全局单例模式要有这个static
    {
   
   
        static CameraManagerModel _instance;
        return _instance;
    }
////////


public:
    // QML可读属性,让它知道这个变量代表 当前帧图片
    Q_PROPERTY(QImage currentFrame READ currentFrame NOTIFY frameReady)

    // 显式构造函数,在类构造时,创建一个指向父对象的指针。父对象销毁时自动销毁所有子对象,包括这里
    CameraManagerModel
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值