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

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

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

配置

lib目录
在这里插入图片描述包含
在这里插入图片描述在这里插入图片描述编译提示缺的文件,到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_H

public:
	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.kler.cn/a/513461.html

相关文章:

  • Python 脚本-扫描当前目录和所有子目录并显示它们的大小。
  • 解决conda create速度过慢的问题
  • 【知识分享】PCIe5.0 TxRx 电气设计参数汇总
  • Linux 如何使用parted进行磁盘分区?
  • JavaScript语言的多线程编程
  • React 中hooks之useTransition使用总结
  • Apache SeaTunnel 2.3.9 正式发布:多项新特性与优化全面提升数据集成能力
  • 【Python项目】小区监控图像拼接系统
  • Spring 6 第5章——面向切面:AOP
  • Spring Boot框架下的上海特产销售商城网站开发之旅
  • Java复习第四天
  • 如何写出优秀的提示词?ChatGPT官方的六种方法
  • 【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解
  • 【蓝桥杯】43694.正则问题
  • Axios发起HTTP请求时的先后执行顺序
  • 1/20赛后总结
  • 22. C语言 输入与输出详解
  • 云计算、AI与国产化浪潮下DBA职业之路风云变幻,如何谋破局启新途?
  • docker load报错(unexpected EOF)
  • 深入解析 Spring 框架中的事务传播行为
  • 视频修复最强算法 部署笔记2025
  • Java面试专题——面向对象
  • JavaScript中的数据类型以及存储上的差别
  • Python----Python高级(文件操作open,os模块对于文件操作,shutil模块 )
  • 深入探究分布式日志系统 Graylog:架构、部署与优化
  • 自动化标注平台开源,基于 yolov8标注平台可本地部署