1.gsoap工具下载
使用gsoap版本2.8.126,
2.创建OnvifFramework_126文件夹
将\gsoap_2.8.126\gsoap-2.8\gsoap下的plugin,import,custom复制到onvifFrameworkC
将wsdl2h.exe和soapcpp2.exe复制到F:\OnvifFramework_126目录下
将F:\gsoap_2.8.126\gsoap-2.8\gsoap下的stdsoap2.cpp,stdsoap2.h,dom.cpp复制到OnvifFramework_126
将F:\gsoap_2.8.112\gsoap-2.8\gsoap下的typemap.dat复制到OnvifFramework_126
3.使用命令生成onvif.h文件
wsdl2h -x -t typemap.dat -o onvif.h http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.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/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl
通过以上方式可以在线下载,无需使用离线文件。
5.onvif.h中添加
#import "wsse.h"
通过添加wsse.h,允许使用ssl。
6.修改import/wsa5.h
防止SOAP_ENV__Fault重复错误,修改\import\wsa5.h。把SOAP_ENV__Fault的名字改了
7.使用命令生成文件
soapcpp2 -2 -x -C onvif.h -L -Iimport
8.提取文件至onvif_frame
提取相应文件,并修改后缀c为cpp。
9.相关报错
9.1 LONG64
取消掉 xsd__duration = #import "custom/duration.h" | xsd__duration 前面的注释
9.2.无法解析的外部符号 _namespaces
在stdsoap2.cpp中添加#include "wsdd.nsmap"
9.3.添加预编译头
_CRT_SECURE_NO_WARNINGS
WITH_DOM
WITH_OPENSSL
DEBUG:生成TEST.txt SEND.txt RECV.txt用于soap调试
WITH_NONAMESPACE :针对报namespace无法解析
10.生成文件和ptz控制demo
11.Onvif鉴权方式改Digest方式。
在gsoap中已经考虑到使用http Digest方式授权。见httpda.c和httpda.h。
仿照e'xample写相关代码即可。
如果一次鉴权多次使用,则参考http_da_restore,