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 客户端的发现相关推荐

  1. onvif学习笔记8:最近写的一个ONVIF客户端的心得小结

    最近,利用业余时间编写一个简单的ONVIF客户端MFC程序,这里记录一下过程. 语言选择 在之前调查过,有用QT实现的,有用python实现的,虽然正在学python,无奈才看了3天的书,没自信去搞. ...

  2. ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)

    概要:   目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲,作为开发者的你还在犹豫是否了解下吗?本文介绍了ONVIF客户端从设备搜索,鉴权,能力获取,媒体信息获取,URI地址获取的整套流 ...

  3. 【视频开发】ONVIF客户端搜索设备获取rtsp地址开发笔记(精华篇)

    转载地址:http://blog.csdn.net/gubenpeiyuan/article/details/25618177 概要:           目前ONVIF协议家族设备已占据数字监控行业 ...

  4. onvif客户端(转载)

    本文为转载文章,文章出处为:https://www.cnblogs.com/rongpmcu/p/10351204.html 如果有侵权请及时联系删除,如想转载请先去联系原作者 onvif客户端 前言 ...

  5. Zabbix实战之客户端自动发现

    Zabbix实战之客户端自动发现 一.客户端状态检查 1.检查客户端的zabbix-agent2是否正常 2.从服务端检查是否可以获得客户端信息 二.配置hosts解析 三.自动发现配置 1.查看自动 ...

  6. Onvif之设备发现-基于gsoap2.8.27

    Onvif之设备发现-基于gsoap2.8.27 工具及平台: Gsoap版本:gsoap2.8.27 Onvif :WSDL文档,(2015.12.15最新文档) 框架代码生成:windows下ws ...

  7. Go语言实现Onvif客户端:9、预置点删改查及跳转

    Go语言实现Onvif客户端:9.预置点删改查及跳转 文章目录 Go语言实现Onvif客户端:9.预置点删改查及跳转 1.前言 2.代码 3.结果 1.前言 我们可以根据摄像头的所拍的位置设置预置点. ...

  8. 破甲两千六 Spring Cloud 教程(三):添加Spring Cloud 的 Netflix Eureka 插件,实现服务端、客户端的发现与注册

    写在前面: Spring Cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等. 5大常用组件: 服务发现 ...

  9. Go语言实现Onvif客户端:8、摄像头PTZ控制(云台控制)

    Go语言实现Onvif客户端:8.摄像头PTZ控制(云台控制) 文章目录 Go语言实现Onvif客户端:8.摄像头PTZ控制(云台控制) 1.PTZ简单再介绍 2.代码 3.结果 1.PTZ简单再介绍 ...

最新文章

  1. Java 获取键盘输入
  2. uniGUI试用笔记(十一)
  3. 利用redis写webshell
  4. android辅助功能模拟home键,Android launcher中模拟按home键的实现
  5. 程序开机全屏且不能见任何windows界面、不能使用系统热键
  6. html5标签的兼容性处理
  7. 用WEB技术栈开发NATIVE应用:WEEX SDK原理详解
  8. 上班能赚到第一桶金吗?
  9. SpringMVC+Spring3+Hibernate4
  10. FISCO BCOS log日志设置配置
  11. 1.Tow Sum(两数和)
  12. redis缓存Hash操作的在主数据中的应用
  13. TIPS:java 类的全局变量与静态变量
  14. 利用ant自动从vss下载代码并编译到自动发布
  15. python 规则引擎 drools_Drools规则引擎入门指南(一)
  16. ajax接收反参时,接收到[object XMLDocument]时的处理方法
  17. markdown如何设置图片大小_cnblogs文章/MarkDown内如何调整图片的宽度?
  18. android上拉菜单和下拉菜单的实现
  19. 安装应用提示 该文件包与具有同一名称的现有文件包存在冲突。 无法安装
  20. 芯片SA58672(功放芯片)

热门文章

  1. python find函数 和index的区别_python中index()与find()的区别
  2. java logger 静态,java11教程--公共静态接口System.Logger
  3. 英特尔cpu发布时间表_10纳米来了:英特尔十一代酷睿,性能升20%,AI算力乘5倍...
  4. SparkSQL之External Data读写parquet
  5. HDFS 文件系统NameSpace、副本机制
  6. 程序员公开上班摸鱼神器!有了它,老板都不好意思打扰你!
  7. 就是肝!计算机基础知识总结与操作系统 PDF 下载
  8. 赶快卸载!微软新公布了18个流氓浏览器插件!
  9. 前端还是后端?这些公号教你一锅端!
  10. java class 结构_Java class文件的结构