gSOAP
gSOAP 官方网址:http://www.cs.fsu.edu/~engelen/soap.htmlgSOAP 下载地址:https://sourceforge.net/projects/gsoap2/files/
在 Windows 平台,gsoap_2.8.118.zip 版本因部分变量未声明,会导致生成 ONVIF 源码失败,其他版本可以生成成功。
wsdl2h 和 soapcpp2 简介
要用 gSOAP 生成 ONVIF 源码,必须用到 wsdl2h 和 soapcpp2 两个工具(执行文件)。其中 wsdl2h 工具用于生成 ONVIF 框架头文件,soapcpp2 工具生成 ONVIF 框架源码。
代码生成
解压
将下载的 gSOAP 工具解压至本地目录,进入 gsoap_2.8.117\gsoap-2.8\gsoap\bin\win64 目录,在目录中创建 wsdl, onvifgen, runtime 文件夹。
下载 wsdl
wsdl 下载地址:https://www.onvif.org/profiles/specifications/
根据需要 ONVIF 特性下载所需的 wsdl 文件,保存至 wsdl 文件夹。
生成 C++ 代码
取消注释
gsoap_2.8.117\gsoap-2.8\gsoap目录中typemap.dat关于xsd__duration的注释。1
xsd__duration = #import "custom/duration.h" | xsd__duration
打开命令行管理工具,进入
gsoap_2.8.117\gsoap-2.8\gsoap\bin\win64目录,执行如下命令生成ONVIF框架头文件:1
wsdl2h -o onvif.h -t ../../typemap.dat ./wsdl/accesscontrol.wsdl ./wsdl/accessrules.wsdl ./wsdl/actionengine.wsdl ./wsdl/advancedsecurity.wsdl ./wsdl/analytics.wsdl ./wsdl/analyticsdevice.wsdl ./wsdl/appmgmt.wsdl ./wsdl/authenticationbehavior.wsdl ./wsdl/bw-2-vs-mod.wsdl ./wsdl/credential.wsdl ./wsdl/deviceio.wsdl ./wsdl/devicemgmt.wsdl ./wsdl/display.wsdl ./wsdl/display2.wsdl ./wsdl/doorcontrol.wsdl ./wsdl/event.wsdl ./wsdl/event-vs.wsdl ./wsdl/federatedsearch.wsdl ./wsdl/imaging.wsdl ./wsdl/media.wsdl ./wsdl/media2.wsdl ./wsdl/provisioning.wsdl ./wsdl/ptz.wsdl ./wsdl/receiver.wsdl ./wsdl/recording.wsdl ./wsdl/replay.wsdl ./wsdl/schedule.wsdl ./wsdl/search.wsdl ./wsdl/security.wsdl ./wsdl/thermal.wsdl ./wsdl/uplink.wsdl ./wsdl/remotediscovery.wsdl
编译成功后,在
win64目录中,将生成onvif.h文件。支持认证,有些
ONVIF接口调用时需要携带认证信息,要使用soap_wsse_add_UsernameTokenDigest函数进行授权,所以要在onvif.h头文件开头加入:1
#import "wsse.h"
头文件修改完成后,使用如下命令产生框架代码:
1
soapcpp2 -2 -L -x -i -f10 -I../../ -I../../import -I../../custom -d./onvifgen onvif.h
命令执行成功后,将在
onvifgen目录下生成ONVIF框架源码。复制其他运行所需头文件至
runtime目录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17cp ..\..\dom.cpp .\runtime
cp ..\..\stdsoap2.cpp .\runtime
cp ..\..\stdsoap2.h .\runtime
cp ..\..\custom\duration.c .\runtime
cp ..\..\custom\duration.h .\runtime
cp ..\..\custom\struct_timeval.h .\runtime
cp ..\..\custom\struct_timeval.c .\runtime
cp ..\..\plugin\mecevp.c .\runtime
cp ..\..\plugin\mecevp.h .\runtime
cp ..\..\plugin\smdevp.c .\runtime
cp ..\..\plugin\smdevp.h .\runtime
cp ..\..\plugin\threads.c .\runtime
cp ..\..\plugin\threads.h .\runtime
cp ..\..\plugin\wsaapi.c .\runtime
cp ..\..\plugin\wsaapi.h .\runtime
cp ..\..\plugin\wsseapi.cpp .\runtime
cp ..\..\plugin\wsseapi.h .\runtime
参考资料
CSDN|ONVIF协议网络摄像机(IPC)客户端程序开发
Github|rapidonvif
gSOAP|ONVIF官方使用示例