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

server/2025/1/24 5:34:04/

使用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/server/160953.html

相关文章

连接 OpenAI 模型:基础操作

在这一部分中&#xff0c;我们将介绍如何连接 OpenAI 模型&#xff0c;设置 API 密钥&#xff0c;并使用 Spring AI 的 ChatClient 与 OpenAI 模型进行简单的对话。Spring AI 为集成 OpenAI 模型提供了方便的工具&#xff0c;使得开发者能够更轻松地与 GPT 系列模型进行交互。 …

Windows 下本地 Docker RAGFlow 部署指南

Windows 下本地 Docker RAGFlow 部署指南 环境要求部署步骤1. 克隆代码仓库2. 配置 Docker 镜像加速(可选)3. 修改端口配置(可选)4. 启动服务5. 验证服务状态6. 访问服务7. 登录系统8. 配置模型8.1 使用 Ollama 本地模型8.2 使用在线 API 服务9. 开始使用10. 常见问题处理端…

WPF MVVM 模式如何监听IsVisibleChanged 事件

原本以为这是一个很简单的问题&#xff0c;但是我却走了不少的弯路。记录下来自省。 我使用的是库System.Windows.Interactivity.dll&#xff0c;首先在xaml 中使用了EventTrrigger <!-- 当 IsVisibleChanged 事件触发时&#xff0c;执行绑定的命令 --> <!--<…

代码随想录 栈与队列 test 7

347. 前 K 个高频元素 - 力扣&#xff08;LeetCode&#xff09; 首先想到哈希&#xff0c;用key来存元素&#xff0c;value来存出现次数&#xff0c;最后进行排序&#xff0c;时间复杂度约为o(nlogn)。由于只需求前k个&#xff0c;因此可以进行优化&#xff0c;利用堆来维护这…

npm install 报错:Command failed: git checkout 2.2.0-c

[TOC](npm install 报错&#xff1a;Command failed: git checkout 2.2.0-c) npm install 报错&#xff1a;Command failed: git checkout 2.2.0-c export NODE_HOME/usr/local/node-v14.14.0-linux-x64 npm config set registry https://registry.npmmirror.com 使用如上环…

Linux运维篇-PAM安全模块配置

PAM是什么&#xff1f; PAM&#xff08;可插入认证模块&#xff09;是UNIX操作系统上一个实现模块化的身份验证的服务。当程序需要对用户进行身份验证时加载并执行。PAM文件通常位于/etc/pam.d目录中。 而Linux-PAM&#xff0c;是linux可插拔认证模块&#xff0c;是一套可定制…

【Javaweb05】 XML探秘:解码数据的哲学,构建跨界的沟通桥梁

文章目录 前言&#x1f30d;一.XML简介❄️1.为什么需要 XML ❄️2.XML 技术用于解决什么问题❄️ 3.XML概念和特点 &#x1f30d;二.XML 语法❄️ 1、文档声明❄️ 2、元素❄️3、元素命名规则 ❄️ 4、属性❄️ 5、CDATA 区 &#x1f30d;三.XML 解析技术原理之DOM4j❄️ 1…

NIO 和 Netty 在 Spring Boot 中的集成与使用

Netty到底是个啥&#xff0c;有啥子作用 1. Netty 的本质&#xff1a;对 NIO 的封装 NIO 的原生问题&#xff1a; Java 的 NIO 提供了非阻塞 I/O 和多路复用机制&#xff0c;但其使用较为复杂&#xff08;如 Selector、Channel、Buffer 的配置和管理&#xff09;。开发者需要自…