ONVIF开发---ONVIF框架代码生成

目录

下载wsdl源文件

编译wsdl源文件、生成c/c++代码

准备编译环境

编译

整理文件


 

下载wsdl源文件

wsdl文件官网: https://www.onvif.org/profiles/specifications/

可以选择将各个wsdl文件下载下来,也可以不下载, 本文采用不下载方式。

 

编译wsdl源文件、生成c/c++代码

准备编译环境

新建目录onvif-wsdl, 将gSOAP安装目录下的custom、import、typemap.dat、wsdl2h、soapcpp2拷贝过来,效果如下:

gSOAP的安装过程参考:gSOAP编译安装

编译

编译过程分为两步:

  第一步: 生成头文件

./wsdl2h -P -x  -c  -s  -t  typemap.dat  -o  onvif.h  https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl  https://www.onvif.org/ver10/events/wsdl/event.wsdl  https://www.onvif.org/ver10/actionengine.wsdl https://www.onvif.org/ver20/analytics/wsdl/analytics.wsdl https://www.onvif.org/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl https://www.onvif.org/ver10/credential/wsdl/credential.wsdl https://www.onvif.org/ver10/deviceio.wsdl https://www.onvif.org/ver10/display.wsdl https://www.onvif.org/ver10/pacs/doorcontrol.wsdl https://www.onvif.org/ver20/imaging/wsdl/imaging.wsdl https://www.onvif.org/ver20/media/wsdl/media.wsdl https://www.onvif.org/ver10/provisioning/wsdl/provisioning.wsdl https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl https://www.onvif.org/ver10/receiver.wsdl https://www.onvif.org/ver10/recording.wsdl https://www.onvif.org/ver10/search.wsdl https://www.onvif.org/ver10/replay.wsdl https://www.onvif.org/ver10/schedule/wsdl/schedule.wsdl https://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl https://www.onvif.org/ver10/thermal/wsdl/thermal.wsdl https://www.onvif.org/ver10/uplink/wsdl/uplink.wsdl
       -c   产生c语言的代码,否则产生C++(默认)
       -s   不使用STL代码
       -t   指定typemap.dat文件
       -o   指定生成的头文件名

命令执行成功后,生成onvif.h文件

 

  第二步:编译生成c/c++源码

有些ONVIF接口调用时需要携带认证信息,要使用soap_wsse_add_UsernameTokenDigest函数进行授权,所以要在onvif.h头文件开头加入

#import "wsse.h"

如果onvif.h不加入#import "wsse.h",使用soap_wsse_add_UsernameTokenDigest函数会导致编译出错(错误信息如下):

wsse2api.c(183): error C2039: “wsse__Security”: 不是“SOAP_ENV__Header”的成员

执行如下命令:

./soapcpp2 -2 -C -L -c -x -Iimport -Icustom onvif.h 
//soapcpp2命令的相关命令参数如下:(可以根据自己的实际需要添加不同参数,通过soapcpp2 -h来查看帮助信息)
   -2    //采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到
   -x    //不产生xml文件(可用可不用,xml有一定帮助,但是太多)
   -I   //为引入路径
   -C   //只产生客户端代码(注意:C是大写,不推荐有次命令)

 当打印出Compilation successful,则编译成功,生成代码目录如下:

 

 

其中的*.nsmap为命名空间「namespaces变量」的定义,内容都是一样的,我们将其中一个命名为wsdd.h,后续会用到

整理文件

    编译完成后的代码还不能直接使用,需要做进一步整理

1. 拷贝其他用到的源码文件到当前目录

cp stdsoap2.c stdsoap2.h plugin/wsaapi.c plugin/wsaapi.h custom/duration.c custom/duration.h ./onvif-wsdl/

以上文件可以在gSOAP的编译目录中找到。

2. 关联命名空间

     在stdsoap2.h中有命名空间变量的声明,

extern SOAP_NMAC struct Namespace namespaces[];

而命名空间的实现是在wsdd.h文件中,所以,将wsdd.h包含进stdsoap2.c文件即可,在stdsoap2.c中添加:

#include "wsdd.h"

至此, wsdl框架源码准备完毕,可以编写onvif程序进行测试了。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值