onvif 开发框架生成,解决在线/本地生成https,ssl/tsl错误,以及原理解释

本文旨在详细的描述如何生生ONVIF 框架和最近ONVIF官网更新后无法在线生成https/ssl/tls错误的解决办法!


首先框架生成需要GSOAP,至于怎么下载,详细过程便不再描述:建议在阅读本文章之前,先通读一遍如下文档,不需要上手操做,但是新手们,提前了解一部分,很有必要!

开发框架生成:http://blog.csdn.net/lvwx369/article/details/39551659

还是框架生成:http://blog.csdn.net/saloon_yuan/article/details/24901597

PS:当初我框架生成,便是这2篇文档带路,不过是在线生成,困于网络,倒是搞了好几天!

最近涉及到项目有一些修改,要求使用最新的ONVIF框架,结果不小心编译的时候,出现HTTPS/SSL之类的错误,起初被忽悠是gsoap的问题,还傻兮兮的编译了一遍gsoap,哎,心累!具体的解决办法后面会描述!

gsoap命令行:http://www.cnblogs.com/hgwang/p/5840265.html

onvif 官网wsdl下载地址:https://www.onvif.org/profiles/specifications/ 

下载带.wsdl和xsd的文件,保存到本地!

把所有下载gsoap 和wsdl放到一个文件夹,还有这个目录\gsoap-2.8\gsoap\bin\win32下的也拷到一起,额,还有typemap.dat,也放到一起然后


。。。。。。忘了之前的博客说的文件目录撒的,妥妥的!

注意了哦:开始干活了,准备工作已搞定!

Cmd  进入到刚才存放文件的目录 运行wsdl2.exe  -o onvif.h -s -t typemap.dat accesscontrol.wsdlaccessrules.wsdl actionengine.wsdl advancedsecurity.wsdl analytics.wsdlanalyticsdevice.wsdl credential.wsdl deviceio.wsdl devicemgmt.wsdl display.wsdldoorcontrol.wsdl event.wsdl imaging.wsdl media.wsdl media2.wsdlprovisioning.wsdl ptz.wsdl receiver.wsdl recording.wsdl replay.wsdlschedule.wsdl search.wsdl thermal.wsdl

  PS:具体命令自己看 GSOAP 工具那个连接,根据需求自己输入命令

然后:。。。。。。。。。就出错了,没毛病


意思是在读取actionengne.wsdl的时候找不到onvif.xsd,所有我们用记事本打开这个wsdl,


诺,路径他使用的../ver10/schema/onvif.xsd"  想想我们的放哪儿了!同级目录,那就改改呗,

改完后在生成一次!又出现了另外一个WSDL找不到XSD的问题,那就在改呗!改到没错为止!!!

好了,开始了,出现ssl/tsl 之类的错误了仔细读一下!


然后打开WSDL看看,


所以,有人懂了没?这里的onvif.xsd使用的是HTTP连接,想到https那个问题了没?在http连接不上的时候,会使用https来进行连接,所以ssl的错误就这么出来了,既然找到问题了,解决办法也就有了:就是按照上面的,将wsdl里面的路径改成本地,在线生成方式,那就去官网找到xsd那个文件,把地址获取,替换到WSDL;估计是之前ONVIF官网在进行改版的时候,对地址做了修改,导致现在http连接不上,就出现连接https导致ssl之类的错误!然后就是改啊改,比竟一堆!


所以,终于搞定了

然后在ONVIF.H里,添加一句#import“wsse.h”用于鉴权!大概在100行左右

然后执行如下命令,具体命令还是看gsoap哪个连接下的博客,此处不详述!!!

soapcpp2 -2   onvif.h  –j  –x  –L  –I  ./gsoap_2.8/gsoap/import  –I  gsoap-2.8/gsoap

直到出现如下界面,好了,ONVIF 开发框架生成完成!


至于该如何整理生成的文件,包括鉴权所需的一些头文件,这些网上基本都能搜索到,多看看也就理解了!

开发方面的问题,欢迎加入QQ群:465200732一起交流,资源共享!

注:转载请注明出处,谢谢


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用gSOAP生成ONVIF框架代码需要遵循以下步骤: 1. 下载gSOAP工具包并安装到本地。 2. 下载ONVIF设备WSDL文件,例如https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl。 3. 使用gSOAP工具包中的wsdl2h工具将WSDL文件转换为头文件。 4. 使用soapcpp2工具生成ONVIF框架代码,例如: ```bash soapcpp2 -Iimport devicemgmt.h ``` 5. 在生成的代码中实现ONVIF设备的具体操作。 以下是在Linux系统中使用gSOAP生成ONVIF框架代码的示例: 1. 下载gSOAP工具包并安装到本地: ```bash wget https://sourceforge.net/projects/gsoap2/files/gSOAP/gsoap_2.8.112.zip unzip gsoap_2.8.112.zip cd gsoap-2.8 ./configure make sudo make install ``` 2. 下载ONVIF设备WSDL文件: ```bash wget https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl ``` 3. 使用wsdl2h工具将WSDL文件转换为头文件: ```bash wsdl2h -o onvif.h devicemgmt.wsdl ``` 4. 使用soapcpp2工具生成ONVIF框架代码: ```bash soapcpp2 -Iimport onvif.h ``` 5. 在生成的代码中实现ONVIF设备的具体操作。 在生成的代码中,每个ONVIF操作都有对应的函数,例如`SOAP_FMAC5 int SOAP_FMAC6 __tds__GetDeviceInformation(struct soap* soap, _tds__GetDeviceInformation* tds__GetDeviceInformation, _tds__GetDeviceInformationResponse &tds__GetDeviceInformationResponse)`就是获取设备信息的函数。您可以在这些函数中实现具体的操作。 另外,生成的代码中还有一些辅助函数和结构体,您也可以根据需要使用它们。 例如,以下代码片段演示了如何创建一个SOAP客户端并调用`__tds__GetDeviceInformation`函数: ```c++ #include "soapDeviceBindingProxy.h" const char* endpoint = "http://192.168.1.100/onvif/device_service"; DeviceBindingProxy proxy; proxy.soap_endpoint = endpoint; _tds__GetDeviceInformation tds__GetDeviceInformation; _tds__GetDeviceInformationResponse tds__GetDeviceInformationResponse; proxy.__tds__GetDeviceInformation(&tds__GetDeviceInformation, tds__GetDeviceInformationResponse); // 处理返回值 ``` 在使用时,需要将`endpoint`替换为实际的设备IP地址和ONVIF服务端口号。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值