onvif 客户端的发现
1、解压:unzip -X gsoap_2.8.10.zip 编译
2、下载:
wget http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl
3、复制:
cp gsoap-2.8/gsoap/typemap.dat .
4、在typemap.dat 中添加:
#Use gSOAP 2.8.10 and up. In the typemap.dat file used by wsdl2h, add:
# ONVIF recommended prefixes
tds = "http://www.onvif.org/ver10/device/wsdl"
tev = "http://www.onvif.org/ver10/events/wsdl"
tls = "http://www.onvif.org/ver10/display/wsdl"
tmd = "http://www.onvif.org/ver10/deviceIO/wsdl"
timg = "http://www.onvif.org/ver20/imaging/wsdl"
trt = "http://www.onvif.org/ver10/media/wsdl"
tptz = "http://www.onvif.org/ver20/ptz/wsdl"
trv = "http://www.onvif.org/ver10/receiver/wsdl"
trc = "http://www.onvif.org/ver10/recording/wsdl"
tse = "http://www.onvif.org/ver10/search/wsdl"
trp = "http://www.onvif.org/ver10/replay/wsdl"
tan = "http://www.onvif.org/ver20/analytics/wsdl"
tad = "http://www.onvif.org/ver10/analyticsdevice/wsdl"
tdn = "http://www.onvif.org/ver10/network/wsdl"
tt = "http://www.onvif.org/ver10/schema"
# OASIS recommended prefixes
wsnt = "http://docs.oasis-open.org/wsn/b-2"
wsntw = "http://docs.oasis-open.org/wsn/bw-2"
wsrfbf = "http://docs.oasis-open.org/wsrf/bf-2"
wsrfr = "http://docs.oasis-open.org/wsrf/r-2"
wsrfrw = "http://docs.oasis-open.org/wsrf/rw-2"
wstop = "http://docs.oasis-open.org/wsn/t-1"
# WS-Discovery 1.0 remapping
wsdd10__HelloType = | wsdd__HelloType
wsdd10__ByeType = | wsdd__ByeType
wsdd10__ProbeType = | wsdd__ProbeType
wsdd10__ProbeMatchesType = | wsdd__ProbeMatchesType
wsdd10__ProbeMatchType = | wsdd__ProbeMatchType
wsdd10__ResolveType = | wsdd__ResolveType
wsdd10__ResolveMatchesType = | wsdd__ResolveMatchesType
wsdd10__ResolveMatchType = | wsdd__ResolveMatchType
# SOAP-ENV mapping
SOAP_ENV__Envelope = struct SOAP_ENV__Envelope { struct SOAP_ENV__Header *SOAP_ENV__Header; _XML SOAP_ENV__Body; }; | struct SOAP_ENV__Envelope
SOAP_ENV__Header = | struct SOAP_ENV__Header
SOAP_ENV__Fault = | struct SOAP_ENV__Fault
SOAP_ENV__Detail = | struct SOAP_ENV__Detail
SOAP_ENV__Code = | struct SOAP_ENV__Code
SOAP_ENV__Subcode = | struct SOAP_ENV__Subcode
SOAP_ENV__Reason = | struct SOAP_ENV__Reason
5、把编译好的wsdl2h,soapcpp2复制到本目录
6、./wsdl2h -o onvif.h -c -s -t typemap.dat remotediscovery.wsdl
7、./soapcpp2 -c onvif.h -x -I /workplace/mywork/onvif/gsoap-x86/gsoap-2.8/gsoap/import
8、复制文件:
cp gsoap-2.8/gsoap/stdsoap2.* .
9、测试代码:
#include <iostream>
#include "wsdd.nsmap"
#include "soapH.h"
using namespace std;
int main()
{struct soap *soap;struct wsdd__ProbeType req;struct __wsdd__ProbeMatches resp;struct wsdd__ScopesType sScope;struct SOAP_ENV__Header header;int count = 0;int result = 0; char guid_string[100];soap = soap_new(); if(soap==NULL){return -1;}soap_set_namespaces(soap, namespaces); soap->recv_timeout = 5; //超过5秒钟没有数据就退出soap_default_SOAP_ENV__Header(soap, &header);header.wsa__MessageID = guid_string;header.wsa__To= "urn:schemas-xmlsoap-org:ws:2005:04:discovery";header.wsa__Action= "http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe";soap->header = &header;soap_default_wsdd__ScopesType(soap, &sScope);sScope.__item = "";soap_default_wsdd__ProbeType(soap, &req);req.Scopes = &sScope;req.Types = "";result = soap_send___wsdd__Probe(soap, "soap.udp://239.255.255.250:3702", NULL, &req);do{result = soap_recv___wsdd__ProbeMatches(soap, &resp); if (soap->error) { cout<<"soap error:"<<soap->error<<soap_faultcode(soap)<<"---"<<soap_faultstring(soap)<<endl; result = soap->error; break;} else{cout<<"========================================="<<endl;cout<<"Match size:"<<resp.wsdd__ProbeMatches->__sizeProbeMatch<<endl;cout<<"xsd-unsignedInt:"<<resp.wsdd__ProbeMatches->ProbeMatch->MetadataVersion<<endl;cout<<"scopes item:"<<resp.wsdd__ProbeMatches->ProbeMatch->Scopes->__item<<endl;//cout<<"scopes matchby:"<<resp.wsdd__ProbeMatches->ProbeMatch->Scopes->MatchBy<<endl;cout<<"QName:"<<resp.wsdd__ProbeMatches->ProbeMatch->Types<<endl;cout<<"xsd:string:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.Address<<endl;cout<<"xsd:QName:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.PortType<<endl;cout<<"wsa:ServiceNameType:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.ServiceName<<endl;cout<<"sequence of elements:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.__size<<endl;cout<<"xsd:anyType:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.__anyAttribute<<endl;cout<<"endpoint any:"<<resp.wsdd__ProbeMatches->ProbeMatch->wsa__EndpointReference.__any<<endl;cout<<"wsdd:UriListType:"<<resp.wsdd__ProbeMatches->ProbeMatch->XAddrs<<endl;}}while(1);soap_destroy(soap); // remove deserialized class instances (C++ only) soap_end(soap); // clean up and remove deserialized datasoap_done(soap);return result;
}
编译:g++ cc.cpp soapC.c stdsoap2.cpp soapClient.c -I/gsoap-2.8/gsoap
10、运行:./a.out
结果:
1、因为有多个ip(多个网卡)
xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ ./a.out
soap error:-10x8a29778---0x8a2977c
2、只有一个网卡,且ip所在网段正好有两个支持onvif的设备:
xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ ./a.out
=========================================
Match size:1
xsd-unsignedInt:1
scopes item:onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/type/ptz onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/type/network_video_transmitter onvif://www.onvif.org/hardware/DM368 onvif://www.onvif.org/location/country/china onvif://www.onvif.org/name/Dahua
QName:tdn:NetworkVideoTransmitter
xsd:string:urn:uuid:5b71c61f-220b-475d-9eca-dd7941f07767
xsd:QName:0
wsa:ServiceNameType:0
sequence of elements:0
xsd:anyType:
endpoint any:0
wsdd:UriListType:http://192.168.9.110:9988/onvif/device_service
soap error:-10x87a99f8---0x87a99fc
xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$
xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$
xy@xy-pc:/workplace/mywork/onvif/gsoap-x86/mytest/myonvif/test$ ./a.out
=========================================
Match size:1
xsd-unsignedInt:1
scopes item:onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/type/ptz onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/type/network_video_transmitter onvif://www.onvif.org/hardware/DM368 onvif://www.onvif.org/location/country/china onvif://www.onvif.org/name/Dahua
QName:tdn:NetworkVideoTransmitter
xsd:string:urn:uuid:5b71c61f-220b-475d-9eca-dd7941f07767
xsd:QName:0
wsa:ServiceNameType:0
sequence of elements:0
xsd:anyType:
endpoint any:0
wsdd:UriListType:http://192.168.9.110:9988/onvif/device_service
soap error:-10x86929f8---0x86929fc
参考:
http://my.oschina.net/yunuo/blog/119206
http://blog.csdn.net/ghostyu/article/details/8182516
onvif 客户端的发现相关推荐
- onvif学习笔记8:最近写的一个ONVIF客户端的心得小结
最近,利用业余时间编写一个简单的ONVIF客户端MFC程序,这里记录一下过程. 语言选择 在之前调查过,有用QT实现的,有用python实现的,虽然正在学python,无奈才看了3天的书,没自信去搞. ...
- ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
概要: 目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲,作为开发者的你还在犹豫是否了解下吗?本文介绍了ONVIF客户端从设备搜索,鉴权,能力获取,媒体信息获取,URI地址获取的整套流 ...
- 【视频开发】ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)
转载地址:http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要: 目前ONVIF协议家族设备已占据数字监控行业 ...
- onvif客户端(转载)
本文为转载文章,文章出处为:https://www.cnblogs.com/rongpmcu/p/10351204.html 如果有侵权请及时联系删除,如想转载请先去联系原作者 onvif客户端 前言 ...
- Zabbix实战之客户端自动发现
Zabbix实战之客户端自动发现 一.客户端状态检查 1.检查客户端的zabbix-agent2是否正常 2.从服务端检查是否可以获得客户端信息 二.配置hosts解析 三.自动发现配置 1.查看自动 ...
- Onvif之设备发现-基于gsoap2.8.27
Onvif之设备发现-基于gsoap2.8.27 工具及平台: Gsoap版本:gsoap2.8.27 Onvif :WSDL文档,(2015.12.15最新文档) 框架代码生成:windows下ws ...
- Go语言实现Onvif客户端:9、预置点删改查及跳转
Go语言实现Onvif客户端:9.预置点删改查及跳转 文章目录 Go语言实现Onvif客户端:9.预置点删改查及跳转 1.前言 2.代码 3.结果 1.前言 我们可以根据摄像头的所拍的位置设置预置点. ...
- 破甲两千六 Spring Cloud 教程(三):添加Spring Cloud 的 Netflix Eureka 插件,实现服务端、客户端的发现与注册
写在前面: Spring Cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等. 5大常用组件: 服务发现 ...
- Go语言实现Onvif客户端:8、摄像头PTZ控制(云台控制)
Go语言实现Onvif客户端:8.摄像头PTZ控制(云台控制) 文章目录 Go语言实现Onvif客户端:8.摄像头PTZ控制(云台控制) 1.PTZ简单再介绍 2.代码 3.结果 1.PTZ简单再介绍 ...
最新文章
- Java 获取键盘输入
- uniGUI试用笔记(十一)
- 利用redis写webshell
- android辅助功能模拟home键,Android launcher中模拟按home键的实现
- 程序开机全屏且不能见任何windows界面、不能使用系统热键
- html5标签的兼容性处理
- 用WEB技术栈开发NATIVE应用:WEEX SDK原理详解
- 上班能赚到第一桶金吗?
- SpringMVC+Spring3+Hibernate4
- FISCO BCOS log日志设置配置
- 1.Tow Sum(两数和)
- redis缓存Hash操作的在主数据中的应用
- TIPS:java 类的全局变量与静态变量
- 利用ant自动从vss下载代码并编译到自动发布
- python 规则引擎 drools_Drools规则引擎入门指南(一)
- ajax接收反参时,接收到[object XMLDocument]时的处理方法
- markdown如何设置图片大小_cnblogs文章/MarkDown内如何调整图片的宽度?
- android上拉菜单和下拉菜单的实现
- 安装应用提示 该文件包与具有同一名称的现有文件包存在冲突。 无法安装
- 芯片SA58672(功放芯片)
热门文章
- python find函数 和index的区别_python中index()与find()的区别
- java logger 静态,java11教程--公共静态接口System.Logger
- 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿,性能升20%,AI算力乘5倍...
- SparkSQL之External Data读写parquet
- HDFS 文件系统NameSpace、副本机制
- 程序员公开上班摸鱼神器!有了它,老板都不好意思打扰你!
- 就是肝!计算机基础知识总结与操作系统 PDF 下载
- 赶快卸载!微软新公布了18个流氓浏览器插件!
- 前端还是后端?这些公号教你一锅端!
- java class 结构_Java class文件的结构