Onvif开发之代码框架生成篇
来源:互联网 发布:合肥淘宝摄影 编辑:程序博客网 时间:2024/05/10 00:41
看了前一篇的ONVIF的简单介绍应该对它的基本使用都有了一些基本的了解了吧!
下面我讲一步分解向大家介绍下如何通过gsoap生成需要的代码,以及代码中需要注意的问题[基于Linux平台 C开发]
本地生成的基本命令(先在官网下载好wsdl文件,然后和前面wsdl2h命令放在同一个文件下,执行命令时各个wsdl文件之间用空格分开):
修改好onvif.h后,在gsoap-2.8.14/gsoap-2.8/gsoap/bin/linux386下把soapcpp2也拷贝到当前生成onvif.h的目录下,
行如下命令:
整理生成的文件
通过上面的两个步骤的话,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文件)
剩下有效的源码文件如下:
下面我讲一步分解向大家介绍下如何通过gsoap生成需要的代码,以及代码中需要注意的问题[基于Linux平台 C开发]
生成Onvif相关源代码(我现在使用的gsoap版本是gsoap2.8.14,下面有下载地址):
在下载的gsoap文件下,在/gsoap-2.8/gsoap的目录下有有个typemap.dat文件,后面就是通过此文件来生成onvif.h文件的。在这里说明下利用gsoap-2.8.8的版本的话,需要稍微修改下typemap.dat文件,在其后面添加如下内容:
tds = "http://www.onvif.org/ver10/device/wsdl"tev = "http://www.onvif.org/ver10/events/wsdl"tls = "http://www.onvif.org/ver10/display/wsdl"tmd = "http://www.onvif.org/ver10/deviceIO/wsdl"timg = "http://www.onvif.org/ver20/imaging/wsdl"trt = "http://www.onvif.org/ver10/media/wsdl"tptz = "http://www.onvif.org/ver20/ptz/wsdl"trv = "http://www.onvif.org/ver10/receiver/wsdl"trc = "http://www.onvif.org/ver10/recording/wsdl"tse = "http://www.onvif.org/ver10/search/wsdl"trp = "http://www.onvif.org/ver10/replay/wsdl"tan = "http://www.onvif.org/ver20/analytics/wsdl"tad = "http://www.onvif.org/ver10/analyticsdevice/wsdl"tdn = "http://www.onvif.org/ver10/network/wsdl"tt = "http://www.onvif.org/ver10/schema"# OASIS recommended prefixeswsnt = "http://docs.oasis-open.org/wsn/b-2"wsntw = "http://docs.oasis-open.org/wsn/bw-2"wsrfbf = "http://docs.oasis-open.org/wsrf/bf-2"wsrfr = "http://docs.oasis-open.org/wsrf/r-2"wsrfrw = "http://docs.oasis-open.org/wsrf/rw-2"wstop = "http://docs.oasis-open.org/wsn/t-1"# WS-Discovery 1.0 remapping wsdd10__HelloType = | wsdd__HelloType wsdd10__ByeType = | wsdd__ByeType wsdd10__ProbeType = | wsdd__ProbeType wsdd10__ProbeMatchesType = | wsdd__ProbeMatchesType wsdd10__ProbeMatchType = | wsdd__ProbeMatchType wsdd10__ResolveType = | wsdd__ResolveType wsdd10__ResolveMatchesType = | wsdd__ResolveMatchesType wsdd10__ResolveMatchType = | wsdd__ResolveMatchType # SOAP-ENV mapping SOAP_ENV__Envelope = struct SOAP_ENV__Envelope { struct SOAP_ENV__Header *SOAP_ENV__Header; _XML SOAP_ENV__Body; }; | struct SOAP_ENV__Envelope SOAP_ENV__Header = | struct SOAP_ENV__Header SOAP_ENV__Fault = | struct SOAP_ENV__Fault SOAP_ENV__Detail = | struct SOAP_ENV__Detail SOAP_ENV__Code = | struct SOAP_ENV__Code SOAP_ENV__Subcode = | struct SOAP_ENV__Subcode SOAP_ENV__Reason = | struct SOAP_ENV__Reason
注意:gsoap-2.8.14版本则不需要更改
现在就开始对typemap.dat操作来生生头文件了,一般情况都有有两种方法:链接网络生成和本地生成
在下载gsoap文件中,在gsoap-2.8/gsoap/bin/linux386/目录下,有一个wsdl2h命令,可以将此命令和typemap.dat文件放在同一个测试文件夹中
wsdl2h命令的相关参数包括,可以根据实际开发需要来生成代码:
链接网络生成的基本命令如下(各个URL用空格隔开):-c 产生c语言的代码,否则产生C++(默认) -s 不使用STL代码 -t 指定typemap.dat文件 -o 指定生成的头文件名
此方法因为和网络环境有很大的关系,所以中间很容易因为网络问题断掉重新开始,所以不建议使用此方法.wsdl2h -c -s -t typemap.dat -o onvif.h http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdlhttp://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdlhttp://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdlhttp://www.onvif.org/onvif/ver10/analyticsdevice.wsdlhttp://www.onvif.org/onvif/ver10/media/wsdl/media.wsdlhttp://www.onvif.org/onvif/ver10/deviceio.wsdlhttp://www.onvif.org/onvif/ver10/display.wsdlhttp://www.onvif.org/onvif/ver10/event/wsdl/event.wsdlhttp://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdlhttp://www.onvif.org/onvif/ver10/recording.wsdlhttp://www.onvif.org/onvif/ver10/replay.wsdlhttp://www.onvif.org/onvif/ver10/search.wsdlhttp://www.onvif.org/onvif/ver10/receiver.wsdlhttp://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl
本地生成的基本命令(先在官网下载好wsdl文件,然后和前面wsdl2h命令放在同一个文件下,执行命令时各个wsdl文件之间用空格分开):
wsdl的下载地址: wsdl文件wsdl2h -c -s -t typemap.dat -o onvif.h remotediscovery.wsdl devicemgmt.wsdl analytics.wsdl analyticsdevice.wsdlmedia.wsdl deviceio.wsdl display.wsdl event.wsdl imaging.wsdl recording.wsdl replay.wsdl search.wsdl receiver.wsdl ptz.wsdl
通过onvif.h生成需要的源代码框架
在使用命令通过onvif.h生成代码之前,得先确认下是否需要做安全验证,也就是所谓的鉴权(楼主就在开始就是不知道了),如果不需要的话,那就可以直接使用命令了,
如果需要做鉴权的话,则需要修改onvif.h ,在onvif.h中需要加上 (98行的样子)
import "wsse.h" // 安全验证
修改好onvif.h后,在gsoap-2.8.14/gsoap-2.8/gsoap/bin/linux386下把soapcpp2也拷贝到当前生成onvif.h的目录下,
行如下命令:
生成的文件如下:soapcpp2 -2 –c onvif.h -x -I ./gsoap-2.8.14/gsoap-2.8/gsoap/import -I ./gsoap-2.8.14/gsoap-2.8/gsoap///soapcpp2命令的相关命令参数如下:(可以根据自己的实际需要添加不同参数) -2 //采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到 -x //不产生xml文件(可用可不用,xml有一定帮助,但是太多) -I //为引入路径 -C //只产生客户端代码(注意:C是大写,不推荐有次命令)
-rw-r--r-- 1 3634 2013-12-25 10:14 AnalyticsDeviceBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 AnalyticsEngineBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 CreatePullPointBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 DeviceBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 DeviceIOBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 DiscoveryLookupBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 DisplayBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 EventBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 ImagingBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 MediaBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 NotificationConsumerBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 NotificationProducerBinding.nsmap-rw-r--r-- 1 2410694 2013-12-25 10:07 onvif.h-rw-r--r-- 1 3634 2013-12-25 10:14 PausableSubscriptionManagerBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 PTZBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 PullPointBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 PullPointSubscriptionBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 ReceiverBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 RecordingBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 RemoteDiscoveryBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 RuleEngineBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 SearchBinding.nsmap-rw-r--r-- 1 11308204 2013-12-25 10:14 soapC.c-rw-r--r-- 1 713192 2013-12-25 10:14 soapClient.c-rw-r--r-- 1 741 2013-12-25 10:14 soapClientLib.c-rw-r--r-- 1 4882158 2013-12-25 10:14 soapH.h-rw-r--r-- 1 636427 2013-12-25 10:14 soapServer.c-rw-r--r-- 1 741 2013-12-25 10:14 soapServerLib.c-rw-r--r-- 1 855676 2013-12-25 10:14 soapStub.h-rw-r--r-- 1 3634 2013-12-25 10:14 SubscriptionManagerBinding.nsmap-rw-r--r-- 1 3634 2013-12-25 10:14 wsdd.nsmap
整理生成的文件
通过上面的两个步骤的话,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文件)
剩下有效的源码文件如下:
-rwxr-xr-x 1 6560 2013-12-25 10:44 duration.c*-rw-r--r-- 1 2410694 2013-12-25 10:07 onvif.h-rw-r--r-- 1 11308204 2013-12-25 10:14 soapC.c-rw-r--r-- 1 713192 2013-12-25 10:14 soapClient.c-rw-r--r-- 1 4882158 2013-12-25 10:14 soapH.h-rw-r--r-- 1 855676 2013-12-25 10:14 soapStub.h-rwxr-xr-x 1 477042 2013-12-25 10:31 stdsoap2.c*-rwxr-xr-x 1 91109 2013-12-25 10:31 stdsoap2.h*-rw-r--r-- 1 3634 2013-12-25 10:14 wsdd.h
这样基本的ONVIF代码框架就已经生成完成了,如果想看一个简单的代码例子的话,可以参考这个例程
onvif代码简单例程后面的系列文章将简单下自己开发预览,参数这些基本模块的一些问题。
gsoap 2.8.14版本下载:gsoap2.8.14版本
6 0
- Onvif开发之代码框架生成篇
- Onvif开发之代码框架生成篇
- Onvif开发之代码框架生成篇
- Onvif开发之代码框架生成篇
- Onvif开发之代码框架生成篇
- Onvif开发之代码框架生成篇
- onvif开发系列之--------onvif 框架代码生成
- Onvif框架代码生成
- Onvif框架代码生成
- Onvif框架代码生成流程
- onvif代码框架的生成
- onvif协议开发:gsoap代码框架生成命令
- gSOAP+onvif初探(一):生成onvif代码框架
- 使用gsoap生成onvif代码框架
- ONVIF协议网络摄像机(IPC)客户端程序开发(6):使用gSOAP生成ONVIF框架代码
- ONVIF协议网络摄像机(IPC)客户端程序开发(6):使用gSOAP生成ONVIF框架代码
- Onvif之框架生成-基于gsoap2.8.27
- 生成onvif相关的开发代码
- javascript如何获取触发事件的对象
- 对主成分分析(PCA)算法的理解2
- Ajax的readyState和status的值
- IOS学习笔记---UIView
- 某天的ORA-00604问题处理
- Onvif开发之代码框架生成篇
- ubuntu的图形界面与命令行界面互转
- linux一些细节,不定期更新
- 认识下中国最赚钱的服装公司的幕后老板
- YUI介绍以及快速入门 Yahoo的JS框架
- win7硬盘开启AHCI模式
- 琐碎知识点
- AD10 原理图布局 PCB 布局布线 pad via
- javascript