1.下载Gsoap:地址http://sourceforge.net/projects/gsoap2/files/gSOAP/
我下载的版本是:gsoap_2.8.46.zip
2.离线生成onvif.h文件
需要执行命令:
wsdl2h -o onvif.h -c -s -t ./typemap.dat devicemgmt.wsdl media.wsdl event.wsdl display.wsdl deviceio.wsdl imaging.wsdl ptz.wsdl receiver.wsdl recording.wsdl search.wsdl remotediscovery.wsdl replay.wsdl analytics.wsdl analyticsdevice.wsdl actionengine.wsdl accesscontrol.wsdl doorcontrol.wsdl
需要那么多的*.wsdl
下载地址如下:
http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl
http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl
http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl
http://www.onvif.org/onvif/ver10/display.wsdl
http://www.onvif.org/onvif/ver10/deviceio.wsdl
http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl
http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl
http://www.onvif.org/onvif/ver10/receiver.wsdl
http://www.onvif.org/onvif/ver10/recording.wsdl
http://www.onvif.org/onvif/ver10/search.wsdl
http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl
http://www.onvif.org/onvif/ver10/replay.wsdl
http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl
http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl
http://www.onvif.org/ver10/actionengine.wsdl
http://www.onvif.org/ver10/pacs/accesscontrol.wsdl
http://www.onvif.org/ver10/pacs/doorcontrol.wsdl
注意这边怎么保存成wsdl简单说下,就是打开以上地址的时候,查看源码,右键网页另存为即可,期间会提示找不到onvif.xsd、types.xsd和common.xsd只需要根据相应的路径下载即可。
把下载的wsdl文件、typemap.dat、onvif.xsd、types.xsd和common.xsd以及wsdl2h.exe放在同一个文件夹下,然后执行命令:
wsdl2h -o onvif.h -c -s -t ./typemap.dat devicemgmt.wsdl media.wsdl event.wsdl display.wsdl deviceio.wsdl imaging.wsdl ptz.wsdl receiver.wsdl recording.wsdl search.wsdl remotediscovery.wsdl replay.wsdl analytics.wsdl analyticsdevice.wsdl actionengine.wsdl accesscontrol.wsdl doorcontrol.wsdl
提示一下信息说明生成成功了:
注意:生成的时候会提示找不到onvif.xsd、types.xsd路径,只要修改相应的wsdl路径即可
3.生成代码框架:
首先添加对openssl的支持
打开onvif.h,添加#import "wsse.h"
生成命令:
soapcpp2 -c onvif.h -x -I../../gsoap-2.8/gsoap/import -I../../gsoap-2.8/gsoap/ -I../../gsoap-2.8/gsoap/custom -I../../gsoap-2.8/gsoap/extras -I../../gsoap-2.8/gsoap/plugin
注意:如果提示
wsa5.h(288): **ERROR**: remote method name clash: struct/class 'SOAP_ENV__Fault' already declared at line 274
打开文件gsoap_2.8.16/gsoap-2.8/gsoap/import/ wsa5.h
将277行int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex
通过以上步骤,onvif客户端框架基本上有了。
最后只需要保留以下文件即可:
onvif.h、soapC.c、soapClient.c、soapH.h、soapStub.h、stdsoap2.c、stdsoap2.h、wsdd.h(wsdd.nsmap修改的)
其中是stdsoap2.c、stdsoap2.h是gsoap-2.8拷贝过来的。