onvif开发:使用wsdl2h和soap2cpp生成开发文件


关于使用gsoap开发onvif的介绍说明请自行搜索!扼要开发流程看这: gSOAP的使用

这里只是记录我在开发过程中的一点东西。下面的使用环境:


一、使用wsdl2h生成头文件:(对于wsdl文件,仅以devicemgmt.wsdl为例;另本人是习惯C++不太会用C,后面的命令请根据自己需要修订。下同

1)使用在线wsdl:

wsdl2h.exe -o onvif.h -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl
2)使用本地wsdl:首先 http://www.onvif.org/Documents/Specifications.aspx页面最下方下载官方提供的wsdl,
wsdl2h.exe -t typemap.dat -o ./include/onvif.h ./wsdl/onvif.xsd ./wsdl/devicemgmt.wsdl

推荐使用第二种方式,在网速慢的时候很有优势。
注意:不管使用一个或多个wsdl文件,onvif.xsd均是必须的,故在使用本地wsdl方法时同样建议先下载onvif.xsd来节约时间,并更在wsdl文件里的onvif.xsd指向位置:


二、添加对openssl的支持,在上一步生成的onvif.h中添加(可选)
#import "wsse.h"


三、使用soap2cpp生成开发文件:

soapcpp2.exe onvif.h -C -x -L -i -d ./src -I ../;../import;../custom;../extras;../plugin

四、开发onvif:(可选)
因为onvif登陆使用了安全认证,开发的时候需要使用openssl(我使用的是1.0.0),需添加编译宏WITH_DOM;WITH_OPENSSL。


五、其他问题:
1)“error LNK2001: 无法解析的外部符号 _namespaces”解决方法:添加编译宏WITH_NONAMESPACES。(参考这里
2)ONVIF_Device_Test_Tool(如果不是onvif会员是拿不到最新的测试工具的,网上其他下载可能不是最新的)安装之后点击“discovery”一会后奔溃,请重新安装对应.NET(建议安装完整包)。
3)error LNK2005: _namespaces 已经在 .obj 中定义:工程包含了多个nsmap文件或者nsmap文件被包含在头文件中,可删除工程中多余的nsmap文件,并在某个cpp文件中包含nsmap文件:

#include "DeviceBinding.nsmap"
4)Onvif的认证机制参考ONVIF-Core-Specification.pdf的第5.12节说明。如果觉得OpenSSL太大可以替换认证方式,参加这里: 开发之客户端鉴权获取参数篇


参考资料:
1、onvif规范的实现:使用gSOAP创建SOAP调用实例
2、onvif规范的实现:成功实现ONVIF协议RTSP-Video-Stream与OnvifDeviceManager的视频对接
3、gSoap实现ONVIF的设备发现(windows下)
4、ONVIF的相关资料 
5、开发之客户端鉴权获取参数篇




  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值