开发环境见:基于onvif规范的视频监控系统客户端(一)
学习onvif之前必须要安装一些工具。
一、安装gsoap
工具及平台:
Gsoap版本:Gsoap2.8.27 http://sourceforge.net/projects/gsoap2/files/gSOAP/
Onvif :WSDL文档(2015.12.15最新文档)
框架代码生成:windows下wsdl2、soapcpp2(win下和Linux生成一样的)
cd gsoap-2.8.27
在安装之前需要先安装一些编译工具。
安装编译工具:
$sudo apt-get install build-essential
为了成功编译gSOAP,您需要安装GTK+的开发文件和GLib库(libraries)。
$sudo apt-get install libgtk2.0-dev libglib2.0-dev
安装Checkinstall以便管理您系统中直接由源代码编译安装的软件。
$sudo apt-get install checkinstall
安装YACC,YACC是Unix/Linux上一个用来生成编译器的编译器(编译器代码生成器)。
$sudo apt-get install flex bison
安装OpenSSL
$sudo apt-get install openssl
安装OpenSSL通常的库文件,首先使用以下命令来确定在Ubuntu系统中可获得的库文件的应用版本:
$sudo apt-cache search libssl | grep SSL
$sudo apt-get install libssl-dev
简单安装:(安装到/usr/local/gSOAP目录下)
configure --prefix=/usr/local/gSOAP
make
make install
为了后面的C和C++版本的服务和客户端的开发能够脱离源代码目录,最好还要如下处理:
(1)将源代码目录(gsoap-2.8.27目录)下gsoap子目录中的import目录拷贝到gSOAP目录下来;
(2)gSOAP目录下建一个env目录,将gsoap/samples/link下的所有文件拷贝过来,并且生成envC.o(C版本要用到),方法是:
/usr/local/gSOAP/bin/soapcpp2 -penv -c env.h
g++ -c -I /usr/local/gSOAP/include envC.c
(3)gSOAP目录下建一个src目录,将将源代码目录下gsoap子目录中的stdsoap*.*拷贝过来。
gSOAP安装完成。
二、通过gsoap-2.8(解压gsoap2.8.27包后得到的目录)/gsoap目录下的typemap.dat生成onvif.h,具体操作如下:
1、创建存放onvif文件的目录(路径自定义)。如:/home/onvif_new
2、将gsoap-2.8/gsoap下的typemap.dat拷贝到/home/onvif_new
3、使用wsdl2h生成onvif.h,这里使用在线的方式,免得还要手动添加好多.xsd文件
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/events/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/ver10/media/wsdl/media.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/onvif/ver10/schema/onvif.xsd
http://www.onvif.org/ver10/actionengine.wsdl
http://www.onvif.org/ver10/pacs/accesscontrol.wsdl
http://www.onvif.org/ver10/pacs/doorcontrol.wsdl
http://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl
http://www.onvif.org/ver10/accessrules/wsdl/accessrules.wsdl
http://www.onvif.org/ver10/credential/wsdl/credential.wsdl
http://www.onvif.org/ver10/schedule/wsdl/schedule.wsdl
这些网址之间用空格隔开
4、在onvif.h中加入#import “wsse.h”,用来做安全验证(加在已有的头文件后边)。
三、使用soapcpp2生成C文件
1、soapcpp2 -c onvif.h -x -I /home/gsoap-2.8/gsoap/import -I /home/gsoap-2.8/gsoap/
注:做服务器端开发,server和client端的代码都要生成,因为sever端的代码要用到client中的函数这样就不需要自己写了。
注:生成的时候可能会出现如下错误:
wsa5.h(290): **ERROR**: remote method nameclash: struct/class 'SOAP_ENV__Fault' already declared at line 274
解决办法如下:
打开gsoap_2.8.17\gsoap-2.8\gsoap\import 路径下的wsa5.h, 将277行的SOAP_ENV__Fault结构体注释掉(改成其他名字亦可)
2、删除一些生成的多余的文件。
(1).后缀为nsmap的命名空间文件内容都一样,保留一个即可,后缀改为.h文件(wsdd.nsmap更名为wsdd.h),需要的时候包含此文件即可
(2).删除soapClientLib.c和soapServerLib.c文件。
3.将/home/gsoap-2.8/gsoap/下的stdsoap2.h和stdsoap2.c文件和/home/gsoap-2.8/gsoap/custom下的duration.c文件都拷贝到当前目录下
到这里基本的onvif框架已经搭建完成。