onvif开发实战1--总结框架搭建

简介: Gsoap及开发框架生成: 一:gsoap下载和编译   1.下载Gsoap:地址:http://sourceforge.net/projects/gsoap2/files/gSOAP/ 2.

Gsoap及开发框架生成:

一:gsoap下载和编译
 
2.安装:  ./configure --prefix=你的安装目录 
                make
                make install
二:在线生成onvif.h(笔者试了离线生成,各种报错,所以劝各位还是在线生成)
wsdl2h -o onvif.h -c -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl  http://www.onvif.org/onvif/ver10/recording.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl http://www.onvif.org/ver10/actionengine.wsdl http://www.onvif.org/ver10/pacs/accesscontrol.wsdl http://www.onvif.org/ver10/pacs/doorcontrol.wsdl 
注:离线报错如下

1)使用wsdl2h出现    Reading file 'accesscontrol.wsdl'... 
Cannot open 'types.xsd' to retrieve schema

我这个问题是因为把onvif的 accesscontrol.wsdl 这个文件下载到本地,然后直接 wsdl2h accesscontrol.wsdl -o accesscontrol.h  出现的,我换一种做法,就是直接在wsdl2h 后面加上wsdl文件所在的URL,wsdl2h http://www.onvif.org/ver10/pacs/accesscontrol.wsdl -o accesscontrol.h 这个问题就没有啦。具体什么原因我也不知道是为什么。

 

如果直接生成对应C的库文件会发生重复定义错误,可以修改该文件。

wsa5.h(288): **ERROR**: remote method name clash: struct/class 'SOAP_ENV__Fault' already declared at line 274

打开文件gsoap_2.8.16/gsoap-2.8/gsoap/import/ wsa5.h

 

将277行int SOAP_ENV__Fault修改为int SOAP_ENV__Fault_alex

笔者没有使用这种方法,是将这个结构体直接注释的方式,最后的结果是,都可以使用。

 

同时上一步生成的onvif.h文件中没有打开wsse.h, 导致最后生成代码中SOAP_ENV__Header 结构体中缺少定义 wsse__Security数据段,无法进行鉴权命令。

即:添加对openssl的支持,在上一步生成的onvif.h中添加(可选)

 
 
  1. #import "wsse.h"  

 

 

随后使用命令生成:

 

  1. soapcpp2  -c onvif.h -x -I/root/Tools/Gsoap/gsoap-2.8/gsoap/import -I/root/Tools/Gsoap/gsoap-2.8/gsoap/ -I/root/Tools/Gsoap/gsoap-2.8/gsoap/custom -I/root/Tools/Gsoap/gsoap-2.8/gsoap/extras -I/root/Tools/Gsoap/gsoap-2.8/gsoap/plugin   
 通过上面的两个步骤的话,onvif的基本代码框架就已经有了,里面可能有就开发而已不需要的文件,可以直接删除掉,还有一些文件需要从gsoap里面拷贝过来
        1.修改wsdd.nsmap文件名为wsdd.h,删掉其他所有的nsmap文件(rm *.nsmap),命令空间文件文件都差不多,保留一个即可,需要的时候包含此文件就好
        2.直接删除soapClientLib.c和soapServerLib.c文件,在开发过程中没有实际用处
        3.将gsoap-2.8.14/gsoap-2.8/gsoap下的stdsoap2.h和stdsoap2.c文件和gsoap-2.8.14/gsoap-2.8/gsoap/custom下的duration.cw文件都拷贝到当前目录下
        4.如果是作客户端的开发的话,则删掉soapServer.c文件,不然的话,里面调用的很多接口只是写了申明了函数原型,而没有实现,需要服务端开发来实现的,剩余客户端开发代码如下(服务端的话,多一个soapServer.c文件)
剩下有效的源码文件如下:

 
 
 
  1. -rwxr-xr-x 1      6560 2013-12-25 10:44 duration.c*  
  2. -rw-r--r-- 1   2410694 2013-12-25 10:07 onvif.h  
  3. -rw-r--r-- 1  11308204 2013-12-25 10:14 soapC.c  
  4. -rw-r--r-- 1    713192 2013-12-25 10:14 soapClient.c  
  5. -rw-r--r-- 1   4882158 2013-12-25 10:14 soapH.h  
  6. -rw-r--r-- 1    855676 2013-12-25 10:14 soapStub.h  
  7. -rwxr-xr-x 1    477042 2013-12-25 10:31 stdsoap2.c*  
  8. -rwxr-xr-x 1     91109 2013-12-25 10:31 stdsoap2.h*  
  9. -rw-r--r-- 1      3634 2013-12-25 10:14 wsdd.h   
 

这样基本的ONVIF代码框架就已经生成完成了,如果想看一个简单的代码例子的话,可以参考这个例程

目录
相关文章
|
23天前
|
前端开发 API 微服务
开发指南005-前端配置文件
就前端而言,很多系统修改配置是在代码里修改,然后打包或者是修改编译环境来重新编译
开发指南005-前端配置文件
|
4月前
|
Web App开发 前端开发 JavaScript
【前端学习指南】基础开发环境搭建
【1月更文挑战第26天】【前端学习指南】基础开发环境搭建
|
9月前
|
JSON 数据可视化 网络安全
HarmonyOS学习路之开发基础知识——应用配置文件
应用的每个HAP的根目录下都存在一个“config.json”配置文件,文件内容主要涵盖以下三个方面
|
10月前
|
Dubbo Java 应用服务中间件
超简单,手把手教你搭建Dubbo工程(内附源码)
超简单,手把手教你搭建Dubbo工程(内附源码)
98 0
|
11月前
|
移动开发 JavaScript 前端开发
开源即时通讯IM框架MobileIMSDK的H5端开发快速入门
开源即时通讯IM框架MobileIMSDK的H5端开发快速入门
160 0
|
12月前
|
Java 数据安全/隐私保护 微服务
SpringBoot进阶:一键集成GrayLog,那叫一个丝滑
在微服务架构中,一个服务通常都会有多个实例,而这些服务实例可能会被部署到不同的机器或虚拟容器上。此时对于日志数据的查看和分析就会变得困难起来,因为这些服务的日志数据都散落在各自实例所在的机器或容器上。例如,我现在要在订单服务里查找一个订单id为1的日志,而订单服务有10个实例并且部署在10台不同的机器上,那么我就得一台台的去找这个日志数据。所以这时候我们就需要有一个可以实现日志聚合的工具,将所有实例的日志数据都聚合在一个地方,那么我们就不需要到每个实例去找日志了,而本文将使用的日志聚合工具为Graylog
|
Linux Go API
【Golang 快速入门】项目实战:即时通信系统
Golang 实战之即时通信系统 服务端版本一:构建基础 Server 版本二:用户上线功能 版本三:用户消息广播机制 版本四:用户业务层封装 版本五:在线用户查询 版本六:修改用户名 版本七:超时强退功能 版本八:私聊功能
354 0
【Golang 快速入门】项目实战:即时通信系统
|
消息中间件 自然语言处理 Java
ElasticSearch 学习笔记(四)-----ES在SpringBoot中的集成以及项目应用开发指南
接上一篇ElasticSearch 学习笔记(三)-----ES的设计原理以及分词器说明。今天我们主要介绍ES 与SpringBoot 的集成以及项目应用开发指南。
754 0
ElasticSearch 学习笔记(四)-----ES在SpringBoot中的集成以及项目应用开发指南
|
存储 移动开发 小程序
uniapp环境搭建以及基础配置详解
安装编辑器 HbuilderX(HbuilderX 是通用的前端开发工具,但为 uni-app 做了特别强化)。 下载 APP 开发板,可开箱即用。 安装微信开发者工具。
689 0
uniapp环境搭建以及基础配置详解
|
芯片 内存技术
应用实战精解系列(五):基于RVB2601的Web播放器
应用实战精解系列(五):基于RVB2601的Web播放器
292 0
应用实战精解系列(五):基于RVB2601的Web播放器