大华相机DH-IPC-HFW3237M支持的ONVIF协议

news/2025/1/23 9:22:59/

使用libONVIF C++库。
先发现相机。

配置

lib目录
在这里插入图片描述包含
在这里插入图片描述在这里插入图片描述编译提示缺的文件,到onvif>libonvif里面拷贝过来。

在这里插入图片描述在这里插入图片描述在这里插入图片描述改UDP端口
在这里插入图片描述

代码

使用msvc 2022的向导生成空项目,从项目的main示例拷贝过来。

CameraOnvif.h

#pragma once#include <QObject>
#include <QUrl>#include "Response.h"
#include "SoapHelper.h"
#include "OnvifDevice.h"
#include "OnvifDiscovery.h"class CameraOnvif : public QObject
{QOBJECT_Hpublic:CameraOnvif(QObject* parent = nullptr);~CameraOnvif();QObject* _parent;};

CameraOnvif.cpp

#include "CameraOnvif.h"CameraOnvif::CameraOnvif(QObject* parent)
{_parent = parent;auto cb = SoapCtx::Builder();cb.SetSendTimeout(1000);cb.SetReceiveTimeout(2000);auto discovery = new OnvifDiscoveryClient(QUrl("soap.udp://239.255.255.250:3702"), cb.Build(), _parent);ProbeTypeRequest request;request.Types = (char*)"tds:Device";auto uuidOne = QString("uuid:%1").arg(SoapHelper::GenerateUuid());auto probeResponseTwo = discovery->Probe(request, uuidOne);request.Types = (char*)"tdn:NetworkVideoTransmitter";auto uuidTwo = QString("uuid:%1").arg(SoapHelper::GenerateUuid());auto probeResponseOne = discovery->Probe(request, uuidTwo);if (probeResponseOne && probeResponseTwo) {auto foundMatches = 0;auto matchResp = discovery->ReceiveProbeMatches();if (matchResp && matchResp.GetResultObject()) {auto relatesTo = matchResp.GetSoapHeaderRelatesTo();if (!relatesTo.isNull() && (uuidOne.compare(relatesTo) == 0 || uuidTwo.compare(relatesTo) == 0)) {if (auto matchs = matchResp.GetResultObject()) {if (matchs->wsdd__ProbeMatches) {for (auto i = 0; i < matchs->wsdd__ProbeMatches->__sizeProbeMatch; ++i) {wsdd__ProbeMatchesType match = matchs->wsdd__ProbeMatches[i];for (auto ii = 0; ii < match.__sizeProbeMatch; ++ii) {foundMatches++;auto probe = match.ProbeMatch[ii];qDebug() << "Found match:" << "    Type:" << probe.Types << " Endpoint:" << probe.XAddrs;if (probe.wsa5__EndpointReference.Address) {qDebug() << "     Reference:" << probe.wsa5__EndpointReference.Address;}if (probe.Scopes) {auto scopeList = QString::fromLocal8Bit(probe.Scopes->__item).split(' ');auto matchBy = QString::fromLocal8Bit(probe.Scopes->MatchBy);if (!matchBy.isEmpty()) {qDebug() << "    Match:" << matchBy;}qDebug() << "    Scope:";for (auto scope : scopeList) {if (!scope.isEmpty()) qDebug() << "        " << scope;}}}}}}}else {qDebug() << "Skipping non related message with id:" << relatesTo;}}}else {qCritical() << "nothing";}
}CameraOnvif::~CameraOnvif()
{
}

调用类。

#include "camera_onvif.h"camera_onvif::camera_onvif(QWidget *parent): QMainWindow(parent)
{ui.setupUi(this);auto camera = new CameraOnvif(this);
}camera_onvif::~camera_onvif()
{}

结果

Found match: Type: “http://www.onvif.org/ver10/network/wsdl”:NetworkVideoTransmitter tds:Device Endpoint: http://192.168.1.109/onvif/device_service
Reference: uuid:42164801-9662-9563-32ba-33e24ea19662
Scope:
onvif://www.onvif.org/location/country/china”
onvif://www.onvif.org/name/Dahua”
onvif://www.onvif.org/hardware/DH-IPC-HFW3237M-I2”
onvif://www.onvif.org/Profile/Streaming”
onvif://www.onvif.org/type/Network_Video_Transmitter”
onvif://www.onvif.org/extension/unique_identifier/0”
onvif://www.onvif.org/Profile/T”


http://www.ppmy.cn/news/1565451.html

相关文章

Node.js 能做什么

一、服务器端开发 1. 构建 Web 服务器 使用内置的 http 模块或流行的框架&#xff08;如 Express、Koa 等&#xff09;创建 Web 服务器&#xff0c;处理 HTTP 请求和响应。可以处理各种类型的请求&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并返回相应的 HTML、JS…

《2024年度网络安全漏洞威胁态势研究报告》

2024年&#xff0c;全球网络安全领域继续面对日益严峻的挑战。在数字化转型的大背景下&#xff0c;漏洞利用成为网络攻击的重中之重。根据统计&#xff0c;全球新增漏洞数量再创新高&#xff0c;漏洞的复杂性加剧&#xff0c;修复周期也在不断缩短。然而&#xff0c;攻击者的手…

C++17 新特性解析:Lambda 捕获 this

C17 引入了许多改进和新特性&#xff0c;其中之一是对 lambda 表达式的增强。在这篇文章中&#xff0c;我们将深入探讨 lambda 表达式中的一个特别有用的新特性&#xff1a;通过 *this 捕获当前对象的副本。这个特性不仅提高了代码的安全性&#xff0c;还极大地简化了某些场景下…

R6学习打卡

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 LSTM-糖尿病预测 数据导入初始化模型定义损失训练模型模型评估个人总结 import torch.nn as nn import torch.nn.functional as F import torchvision,torchim…

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后&#xff0c;可以从系统基础设置、网络配置、性能优化等方面进行配置和优化&#xff0c;以下是具体内容&#xff1a; 系统基础设置 更新系统&#xff1a;以root用户登录系统后&#xff0c;在终端中执行sudo yum update命令&#xff0c;对系统进行更新&#xf…

【面试】Java 记录一次面试过程 三年工作经验

2025 个人工作经验与基础概念 工作挑战及解决方式&#xff1a;这需要根据个人实际工作经历来回答&#xff0c;例如在项目中遇到性能瓶颈&#xff0c;通过代码优化、数据库索引调整或引入缓存机制等方式解决。单例模式&#xff1a; 常见的实现方式有饿汉式、懒汉式&#xff08;…

如何实现亿级用户在线状态统计?

亿级用户在线场景分析与解决方案 目录 亿级用户在线场景分析解决方案 2.1 基于总数的统计方案2.2 基于具体用户详情的统计方案 具体实现 3.1 基于总数的统计方案3.2 基于用户标识的统计实现3.3 Spring Boot 中的实现 总结 1. 亿级用户在线场景分析 以 QQ 在线状态统计为例&am…

pagehelper实现分页功能

pom.xml下载依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.7</version> </dependency>applicaiton.yml添加配置 pagehelper:helperDial…