视频监控相关笔记

news2024/11/15 11:18:31

一、QT 之 QTreeWidget 树形控件

Qt编程指南,Qt新手教程,Qt Programming Guide

一个树形结构的节点中的图表文本 、附带数据的添加:

QTreeWidgetItem* TourTreeWnd::InsertNode(NetNodeInfo node, QTreeWidgetItem* parent_item)  
{  
    // 创建一个QVariant对象,用于存储NetNodeInfo类型的node  
    QVariant var;  
    var.setValue(node);  
  
    // 初始化一个指向QTreeWidgetItem的指针,用于存储新创建的节点  
    QTreeWidgetItem* Item = NULL;  
  
    // 检查parent_item是否为NULL,如果是,则表示要插入的节点是顶级节点  
    if (parent_item == NULL) {  
        // 为顶级节点创建一个新的QTreeWidgetItem对象  
        Item = new QTreeWidgetItem(m_tree.get());  
        // 设置新节点的第一个列的文本为node的Name属性  
        Item->setText(0, (QString)node.Name);  
        // 设置新节点的第一个列的工具提示与文本相同  
        Item->setToolTip(0, Item->text(0));  
        // 将新节点作为顶级节点添加到树形控件中  
        m_tree->addTopLevelItem(Item);  
  
        // 根据node的类型设置图标  
        // 如果节点类型是NodeType_TOURTASK,则使用特定类型的图标  
        if (node.Type == NodeType::NodeType_TOURTASK) {  
            Item->setIcon(0, QIcon(GetIconByNodetype(node.Type)));  
        }  
        // 注意:这里没有处理非NodeType_TOURTASK类型顶级节点的图标设置,可能是个遗漏  
  
        // 将QVariant对象var作为用户自定义数据存储在节点的第一个列上  
        Item->setData(0, Qt::UserRole, var);  
        // 设置节点第一个列的大小提示为30x30  
        Item->setSizeHint(0, QSize(30, 30));  
    }  
    // 如果parent_item不为NULL,则表示要插入的节点是子节点  
    else {  
        // 为子节点创建一个新的QTreeWidgetItem对象,并指定parent_item为其父节点  
        Item = new QTreeWidgetItem(parent_item);  
        // 设置子节点的大小提示为30x30  
        Item->setSizeHint(0, QSize(30, 30));  
        // 设置子节点的第一个列的文本为node的Name属性  
        Item->setText(0, (QString)node.Name);  
        // 设置子节点的第一个列的工具提示与文本相同  
        Item->setToolTip(0, Item->text(0));  
  
        // 根据node的类型或设备状态设置图标  
        // 如果节点类型是NodeType_DEVICE,则根据设备主类型、子类型和状态获取图标  
        if (node.Type == NodeType::NodeType_DEVICE) {  
            Item->setIcon(0, QIcon(GetIconByDevStatus(node.DevMainType, node.DevSubType, node.Status)));  
        }  
        // 如果不是NodeType_DEVICE类型,则根据节点类型获取图标  
        else {  
            Item->setIcon(0, QIcon(GetIconByNodetype(node.Type)));  
        }  
        // 将QVariant对象var作为用户自定义数据存储在节点的第一个列上  
        Item->setData(0, Qt::UserRole, var);  
    }  
  
    // 显示树形控件(通常不是必需的,因为可能在其他地方已经设置为可见)  
    m_tree->show();  
    // 展开树形控件中的所有节点,以便新插入的节点可见  
    m_tree->expandAll();  
  
    // 返回新创建的节点指针,以便调用者可以使用它  
    return Item;  
}

其中注意以下几点:

二、视频播放

1. 主辅码流区别

2.  RTSP

3.  SDK的调用案例:

#pragma once

#include <memory>
#ifdef _WINDOWS
#include <Windows.h>
#ifdef  LIBRTSPCLINET_SDK_EXPORTS
#define LIBRTSPCLINET_API __declspec(dllexport)
#else
#define LIBRTSPCLINET_API __declspec(dllimport)
#endif
#else  
#define LIBRTSPCLINET_API
#endif

#include "Common.h"

using namespace std;

class LIBRTSPCLINET_API LibRtspClientManager
{
public:
    static LibRtspClientManager& getInstance() {
        static LibRtspClientManager instance;
        return instance;
    }

    /* @ 初始化SDK:
       @ 参数:
        onLibRtspClientDateCB 数据回调函数地址
        onLibRtspClientMsgCB  消息回调函数地址
       @ 返回: bool
    */
    bool Init();

    /* @ 反初始化SDK:
       @ 参数:
       @ 返回: void
    */
    void UnInit();

    /* @ 创建RTSP Client:
       @ 参数:
            std::string url : rtsp url
            TransProtocol trans_protocol : 0-udp, 1-tcp
            int timeout : 超时时间,单位秒
       @ 返回: int32_t rtsp session id
    */
    uint32_t CreateRtspClient(std::string url,
        std::string username, std::string password,
        TransProtocol trans_protocol, RtspCallBack* callback, int timeout);

    bool ReleaseRtspClient(uint32_t session_id);

    /* @ 连接服务器
     * @ 异步通知,rtsp连接情况在onLibRtspClientMsgCB反馈
    */
    bool Connect(uint32_t session_id);

    bool Play(uint32_t session_id, std::string params_json);

    bool Control(uint32_t session_id, std::string params_json);

    bool Pause(uint32_t session_id);

    // 恢复播放
    bool Resume(uint32_t session_id);

    // 从指定位置恢复播放
    bool Resume(uint32_t session_id, float npt);

    bool Stop(uint32_t session_id);

    void WaitForStop(uint32_t session_id);
private:
    LibRtspClientManager();

    virtual ~LibRtspClientManager();

    class LibRtspClientPriv;
    std::shared_ptr<LibRtspClientPriv> m_priv;
};

4. 一个webSocket第三方库;easywsclient.hpp   easywsclient.cpp  

Easywsclient: 强大且简单的C++ WebSocket客户端库-CSDN博客

下文代码摘自gitcode.com中: 

#include "easywsclient.hpp"
//#include "easywsclient.cpp" // <-- include only if you don't want compile separately
#ifdef _WIN32
#pragma comment( lib, "ws2_32" )
#include <WinSock2.h>
#endif
#include <assert.h>
#include <stdio.h>
#include <string>

using easywsclient::WebSocket;
static WebSocket::pointer ws = NULL;

void handle_message(const std::string & message)
{
    printf(">>> %s\n", message.c_str());
    if (message == "world") { ws->close(); }
}

int main()
{
#ifdef _WIN32
    INT rc;
    WSADATA wsaData;

    rc = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (rc) {
        printf("WSAStartup Failed.\n");
        return 1;
    }
#endif

    ws = WebSocket::from_url("ws://localhost:8126/foo");
    assert(ws);
    ws->send("goodbye");
    ws->send("hello");
    while (ws->getReadyState() != WebSocket::CLOSED) {
      ws->poll();
      ws->dispatch(handle_message);
    }
    delete ws;
#ifdef _WIN32
    WSACleanup();
#endif
    return 0;
}

 

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

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

相关文章

回文子串通用做法

647. 回文子串 先引出力扣链接 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。示例 1&#xff1a; 输入&#xff1a;"abc" 输出…

for循环的应用

正三角 for (int i 0; i < 8; i) { for (int j 0; j < 15; j) { int kong 8 - i - 1; int star 2 * i 1; if (j < kong) { Console.Write(" "); } else if (j < kong star)…

【LLM学习之路】9月23日24日 第十、十一天 Attention代码解读

【LLM学习之路】9月23日24日 第十、十一天 Attention代码解读 Transformer模型大致分为三类 纯 Encoder 模型&#xff08;例如 BERT&#xff09;&#xff0c;又称自编码 (auto-encoding) Transformer 模型&#xff1b;纯 Decoder 模型&#xff08;例如 GPT&#xff09;&#…

多颜色绘制语义分割/变化检测结果图

在论文绘图时&#xff0c;传统的二元语义分割结果图颜色单一&#xff08;下图左&#xff09;&#xff0c;所以论文中常根据混淆矩阵类别使用多颜色进行绘制&#xff08;下图右&#xff09;&#xff0c;可以看到&#xff0c;结果的可视化效果更好。 以下是绘制代码&#xff1a; …

同等学力申硕英语网课如何选择

很多考生想知道同等学力申硕英语网课如何选择&#xff0c;小编告诉大家&#xff0c;首先明确自己的学习目标和需求是为了提高口语、阅读、写作还是听力能力? 只有明确了自己的学习目标和需求&#xff0c;才能更好地选择适合自己的课程和平台。 二、选择知名品牌和口碑良好的平…

UE5地图白屏/过曝/非常亮の解决方法

今天遇到一个问题 , 新建项目 , 打开虚幻第三人称地图的默认关卡 , 发现白屏 , 啥也看不见 猜测可能是虚幻编辑器的bug , 造成白屏的原因应该是场景过曝了 记录一下解决方案 第一种解决方法 找到场景中的 后期处理体积 (PostProcessVolume) 直接删掉 或者找到 细节面板中 -…

衍射的角谱理论

一、单色平面波与本征函数 不考虑夫琅禾费近似, 则相干光场在给定二平面间的传播过程就是通过一个二维线性空不变系统。 上式函数是这个系统的本征函数,表示振幅为1的平面波在xy平面上的复振幅分布,空间频率分量 = cos / , = cos / 与平面波的传播方向相联系, 空间…

java和mysql命名规则不一样,每次在mybatis中起别名太麻烦?来看看如何设置自动自动映射!

简介&#xff1a; 在 Java 开发中&#xff0c;当使用 MyBatis 框架连接 Java 代码与 MySQL 数据库时&#xff0c;常常会遇到 Java 和 MySQL 命名规则不一致的问题&#xff0c;这使得每次在 MyBatis 中为查询结果起别名变得繁琐。本教程将深入探讨如何设置自动映射&#xff0c;以…

java节假日工具类,判断一个日期是否是法定节假日

java节假日工具类&#xff0c;判断一个日期是否是法定节假日 1.HolidayUtil工具类2.工具类生成的日期json文件3.结果展示 无需链接数据库&#xff0c;无需手写节假日集合列表 1.HolidayUtil工具类 import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.data…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型&#xff0c;是gemma 2的升级版&#xff0c;主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客&#xff1a;https://blog.googl…

Centos redis下载安装以及redis manager连接详细教程

一、redis下载以安装&#xff1a; 1.切换到home目录下 cd /home&#xff08;/是根目录&#xff0c;./是当前目录 ../是父目录&#xff09; 2.执行wget http://download.redis.io/releases/redis-5.0.2.tar.gz&#xff08;这里&#xff0c;不知道为什么安装6开头的版本在make的…

定制智慧科技展厅方案:哪些细节是成功的秘诀?

随着数字科技浪潮的迅猛推进&#xff0c;智慧科技展厅跃升为科技成果展示与技术对话的前沿阵地。其策划与实施方案因而显得尤为关键。在此过程中&#xff0c;精雕细琢每一环节&#xff0c;确保创意与技术的无缝对接&#xff0c;成为不可或缺的要点。现在&#xff0c;让我们深入…

CS创世8GB SD NAND的低功耗特性

在电子设备不断追求低功耗的今天&#xff0c;CS创世半导体的8GB SD NAND芯片以其低功耗特性脱颖而出。这款芯片的读写电流仅为15mA&#xff0c;相较于同类产品&#xff0c;其功耗显著降低&#xff0c;这不仅延长了设备的使用时间&#xff0c;还减少了对电池的依赖。这种低功耗特…

HDMI20协议解析_Audio_Sample

HDMI20协议解析_Audio_Sample 1.版本说明 日期作者版本说明202409XX风释雪初始版本 2.概述 当通过HDMI传输音频信号时&#xff0c;Audio_Sample是必须要传输的数据包之一&#xff1b; 通过前端硬件或软件收到PCM原始音频数据后&#xff0c;需要通过Audio_Sample packet发送给…

跟着B战学习JAVA面试八股文

学习链接&#xff1a;https://www.bilibili.com/video/BV1gm411S7EX/?spm_id_from333.337.search-card.all.click&vd_sourceefbaa07876b231ae3225ba8999116807 创建线程的几种方式&#xff1f; 继承Thread类实现Runnable接口实现Callable接口通过线程池来创建线程 为什么…

fiddler抓包09_过滤站点请求

课程大纲 1、 界面 Fiddler列表默认显示所有请求&#xff0c;可以设置过滤&#xff0c;按照规则只显示指定的请求。 界面介绍&#xff1a; “Use Filters”&#xff1a;过滤功能开关。勾选&#xff0c;开启过滤&#xff1b;反之不开启。 “Hosts”&#xff1a;根据站点&#xf…

免费ppt模板哪里找?职场必备这些利器

一眨眼&#xff0c;9月份的尾声渐近&#xff0c;无论是学生还是职场人士&#xff0c;都开始准备着新一轮的演讲和报告。在这个忙碌的时期&#xff0c;一份精美的PPT模板能够大幅提升你的工作效率&#xff0c;让你的演示更加引人入胜。 不用担心高昂的版权费用&#xff0c;市场…

LPDDR4芯片学习(一)——基础知识与引脚定义

一、基础知识 01 dram基本存储单元 当需要将一位数据存储到DRAM中时&#xff0c;晶体管会充电或放电电容。充电的电容表示逻辑高&#xff08;1&#xff09;&#xff0c;放电的电容表示逻辑低&#xff08;0&#xff09;。由于电容会随着时间泄漏电荷&#xff0c;因此需要定期刷…

接口测试Postman关联,断言,前置,参数化用法

一、Postman下载 我们直接搜索Postman官网下载即可 Postman API Platformhttps://www.postman.com/ 二、使用 下载安装完成后我们需要登录注册&#xff0c;按照Postman的指示进行注册登录&#xff0c;不登陆可能有些功能无法使用 登陆完成我们就可以开始对接口进行测试了 …

用于体积医学图像分割的跨视角差异依赖网络|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Cross-view discrepancy-dependency network for volumetric medical image segmentation 用于体积医学图像分割的跨视角差异依赖网络 01 文献速递介绍 医学图像分割的目标是通过为每个像素分配语义类别&#xff0c;从原始图像中描绘出受试者的解剖结构&#x…