使用gSOAP工具生成onvif框架代码

https://www.cnblogs.com/big-devil/p/7625763.html

 

使用gSOAP工具生成onvif框架代码

<工具产生背景>

         由于SOAP是一种基于xml的文件,手动编写SOAP文件太机械耗时,在这种背景下产生了gSAOP 这个工具,用于生成各种类型的代码,目前支持C/C++,如果索引ONVIF框架代码就会发现,代码中最主要的工作是将程序中的数据生成xml文件,或者是将xml文件中的数据解析成程序中的数据。

<准备工作>

➤工具下载 

        到网站https://www.genivia.com/dev.html下载相应工具,目前最新的版本是gSOAP 2.8.53 但是该官网需要密匙才能下载,所以还是到csdn上面去找。

    或者到gsoap官网https://sourceforge.net/projects/gsoap2/下载最新版gsoap(本次版本为gsoap_2.8.17)并解压。

 ➤下载wsdl文件

       到ONVF官网https://www.onvif.org/profiles/specifications/下载最新的wsdl文件。

 

该官网上面没有具体的下载链接,所以有一个技巧,如果想要查看该wsdl文件中各个数据的含义,可以单击该文件链接。

 下载wsdl文件,根据业务需要,选择相应的wsdl文件,右击该文件链接——>选择另存为——>保存到本地的某个文件夹中就行了。

➤新建工作空间

        新建一个文件夹叫wsdl2h.exe soapcpp2.exe,解压的gsoap_2.8.17文件夹,将

(1)goap_2.8.17\gsoap-2.8\gsoap 路径下的typemap.dat

(2)gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32 路径下的wsdl2h.exe soapcpp2.exe

(3)将下载的wsdl文件放在和wsdl2h.exe soapcpp2.exe同一路径下(注意:其中包含文件 onvif.xsd ,types.xsd ,b-2.xsd ,bf-2.xsd,r-2.xsd,t-1.xsd ,ws-addr.xsd ,ws-discovery.xsd 。这些文件和wsdl文件一样从官网上下载)。

<生成框架代码>

➤生成onvif.h文件

        打开windows平台的cmd(win+r) ,通过cmd进入到新建的文件夹下面(wsdl2h.exe soapcpp2.exe),然后执行以下命令:

wsdl2h -o onvif.h -c -s -t ./typemap.dat remotediscovery.wsdl devicemgmt.wsdl analytics.wsdl analyticsdevice.wsdl media.wsdl deviceio.wsdl display.wsdl event.wsdl imaging.wsdl recording.wsdl replay.wsdl search.wsdl receiver.wsdl ptz.wsdl

 

 

注意:根据业务需求选择wsdl文件,如果对文件不熟悉,可以全部包含进去,防止出现函数找不到的情况,弊端是导致代码量过大,编译时间过长。

remotediscovery.wsdl :用于发现设备

devicemgmt.wsdl :用于获取设备参数

media.wsdl:用于获取视频流地址

ptz.wsdl:用于设备的PTZ控制

我这里只使用了以上4个文件,所以执行命令如下

wsdl2h -o onvif.h -c -s -t ./typemap.dat remotediscovery.wsdl devicemgmt.wsdl media.wsdl  ptz.wsdl

 

➣参数解析

-c : 生成c风格代码(注:后缀名还是.cpp ,但实际上是.c)

-c++:生成c++风格代码(注 : 默认是生成c++代码)

-x : 表示不生成xml 文件(注:生成的xml文件,有助于了解发送是SOAP是怎样的结构,建议不使用-x)

-l : 表示指定导入路径

-C : 表示生成客户端代码

-S : 表示生成服务端代码

-s : 不使用STL代码

-o: 生成.h文件叫什么名字

-t : 后面紧跟“typemap.dat”这个批处理文件

 

执行完该命令后,可以在当前目录变成如下,其中增加了onvif.h文件,该文件是接下来生成框架代码的前提:

➤正式生成框架代码

    在项目开发过程中,往往需要使用“鉴权”这项功能(访问或修改设备参数,需要用户名跟密码,在数据传输过程中,密码是进行了加密处理的),所以在正式生成代码之前在onvif.h文件中加上下面的代码:

#import "wsse.h"

 

    这样在接下生成的框架代码中才有相应的加密函数接口(注意:在Linux环境下,一定要安装openssl库)。

➣准备工作

    (1)将gsoap_2.8.14\gsoap-2.8\gsoap\import拷贝到同gsoapcpp2.exe文件夹下

    (2)将gsoap_2.8.14\gsoap-2.8\gsoap\custom拷贝到同gsoapcpp2.exe文件夹下

通过cmd进入到gsoapcpp2.exe所在文件夹,执行一下命令:

soapcpp2 -2 -c onvif.h -I .\custom -I .\import -I .\import

 

➣参数解析

-c : 生成c风格的代码,因为默认是c++风格的代码

-2:采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到

-I : 指定路径

-x : 不产生xml 文件(不建议是用该选项,xml在开发中具有参考意义)

注意:可以是用以下命令查看各个参数的详细作用

gsoapcpp2  -help

 

执行完以上命令后,可以看见当前文件夹下出现了很多.h文件.c文件.nsmap文件.xml文件(因为.xml文件太多,剪切到xml文件夹下面了)

 

➣提取需要的文件

    将soapC.c , soapH.h , soapClient.c , soapClientLib.c , soapServer.c(用于服务端/设备端的开发) , soapServerLib.c(用于服务端/设备段的开发) soapStub.h , onvif.h(该文件基本已经没有用处了)拷贝到一个单独的文件夹"ONVIF"下面。

    将文件gsoap-2.8\gsoap\dom.c拷贝到ONVIF中(该文件好像没什么作用)

    将文件gsoap-2.8\gsoap\custom\duration.c拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\custom\duration.h拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\mecevp.c拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\mecevp.h拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\smdevp.c拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\smdevp.h拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\stdsoap2.h拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\stdsoap2.c拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\threads.c拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\threads.h拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\wsaapi.c拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\wsaapi.h拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\wsseapi.h拷贝到ONVIF中

    将文件gsoap-2.8\gsoap\plugin\wsseapi.c拷贝到ONVIF中

    将生成的.nsmap文件中的任意一个(因为生成的.nsmap文件中的内容都是一样的)拷贝到ONVIF中

ONVIF文件中所有文件如下所示:

利用以上框架代码,新建main.c就可以开始项目开发了。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值