当前位置: 首页 > news >正文

视频监控相关笔记

一、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 urlTransProtocol trans_protocol : 0-udp, 1-tcpint 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 _WIN32INT rc;WSADATA wsaData;rc = WSAStartup(MAKEWORD(2, 2), &wsaData);if (rc) {printf("WSAStartup Failed.\n");return 1;}
#endifws = 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 _WIN32WSACleanup();
#endifreturn 0;
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • js中Fucntion的意义
  • SpringCloud Alibaba五大组件之——Sentinel
  • vue3-vben-admin开发记录、知识点
  • 游戏淡入淡出效果
  • (笔记自用)LeetCode:快乐数
  • 【Elasticsearch】-图片向量化存储
  • 网络原理之IP协议(网络层)
  • 如何查看线程
  • 【STM32系统】基于STM32设计的DAC输出电压与ADC检测电压系统(简易万用表,检测电压电流)——文末工程资料下载
  • Go语言基础学习01-Liunx下Go开发环境配置;源码组织方式;go build/install/get详解
  • Linux Shell: 使用 Expect 自动化 SCP 和 SSH 连接的 Shell 脚本详解
  • 【Java】注解与单元测试的使用【主线学习笔记】
  • MySQL高阶1965-丢失信息的雇员
  • Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器
  • MICS:PythonJail沙箱逃逸(持续更新中)
  • 自己简单写的 事件订阅机制
  • [case10]使用RSQL实现端到端的动态查询
  • __proto__ 和 prototype的关系
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • django开发-定时任务的使用
  • echarts的各种常用效果展示
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • JavaScript DOM 10 - 滚动
  • Linux链接文件
  • PHP 小技巧
  • Redis学习笔记 - pipline(流水线、管道)
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 怎么把视频里的音乐提取出来
  • 【云吞铺子】性能抖动剖析(二)
  • kubernetes资源对象--ingress
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #100天计划# 2013年9月29日
  • #162 (Div. 2)
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (未解决)macOS matplotlib 中文是方框
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)http-server应用
  • ..回顾17,展望18
  • .NET : 在VS2008中计算代码度量值
  • .NET Core 版本不支持的问题
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net Redis的秒杀Dome和异步执行
  • .NET 常见的偏门问题
  • .net/c# memcached 获取所有缓存键(keys)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • @PreAuthorize注解
  • @SuppressWarnings注解