创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点!
个人座右铭:
1.没有横空出世,只要厚积一定发。
2.你可以学历不高,你可以不上学,但你不能不学习
最近搞了一个来月的ONVIF,由于之前没玩过音视频相关的,所以比较费劲。搞了一个来月,总算是把onvif的主要功能,全部搞好。其实主要有两个难点:第一个是生成gsoap生成onvif框架代码,第二个是云台控制(下一篇中整理)。
二、安装依赖库安装bison(sudo apt-get install bison)
官网:http://www.gnu.org/software/bison/
版本:bison-2.7.91.tar.gz
安装:详见bison-2.7.91/INSTALL说明
安装Flex(sudo apt-get install fiex)
官网:http://flex.sourceforge.net/
版本:flex-2.6.0.tar.gz
安装:详见flex-2.6.0/INSTALL说明
安装OpenSSL(sudo apt-get install openssl)
官网:https://www.openssl.org/
版本:openssl-1.0.2h
安装:详见openssl-1.0.2h/INSTALL说明
备注:我采用默认安装路径/usr/local/ssl/,这个路径等下编译gSOAP源码时会用到
1、下载源码(我下载的是2.8.117)
gSOAP官方网址:gSOAP: SOAP/XML Web Services and XML Data Bindings for C and C++
2. wsdl2h和soapcpp2简介
要用gsoap生成onvif源码,必须用到wsdl2h和soapcpp2两个工具(执行文件)。在gsoapbin目录下,win32和macosx平台已经有现成的了(官方帮我们编译好了的),linux下的要自己编译咯,可参考INSTALL.txt文件进行编译安装(不同gSOAP版本的编译安装方法会略有不同,以你gSOAP版本中的INSTALL.txt为准)。
通过实验证实,wsdl2h和soapcpp2两个工具,不管是Windows版的,还是Linux版的,它们从WSDL转成的框架代码,是一样样的,没有区别。
3、编译生成wsdl2h和soapcpp2两个工具
# cd gsoap-2.8/
# ./configure
# make
# sudo make install
4、检查生成的wsdl2h和soapcpp2两个工具
以上表示 wsdl2h和soapcpp2两个工具,可以正常使用
四、生成ONVIF框架代码(生成C语言的客户端代码)1.新建存放onvif代码目录(我这里新建为onvif)
2.拷贝/usr/local/bin下soapcpp2 wsdl2h工具到onvif,拷贝gsoap目录下的typemap.dat到onvif;
3.参数介绍
-c : 生成c风格代码(注:后缀名还是.cpp ,但实际上是.c)
-c++:生成c++风格代码(注 : 默认是生成c++代码)
-x : 表示不生成xml 文件(注:生成的xml文件,有助于了解发送是SOAP是怎样的结构,建议不使用-x)
-l : 表示指定导入路径
-C : 表示生成客户端代码
-S : 表示生成服务端代码
-s : 不使用STL代码
-o: 生成.h文件叫什么名字
-t : 后面紧跟“typemap.dat”这个批处理文件
4.生成onvif.h(在线生成)
(1)进入onvif目录
(2)wsdl2h -P -c -x -t ./typemap.dat -o ./onvif.h http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.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/display.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/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver10/search.wsdl
说明:这里包含比较齐全,建议在线生成
5.修改onvif
在onvif.h中 增加一句#import "wsse.h",用于身份验证
6.SOAP_ENV__Fault 重复定义问题
这里要说明,网上很多人都说是该名称为“SOAP_ENV__Fault_alex”, 我这里选择注释掉,gsoap-2.8/gsoap/import/wsa5.h中的SOAP_ENV__Fault(在gsoap源文件中的)
7、使用soapcpp2工具,根据头文件产生框架代码(在onvif目录下)
soapcpp2 -2 -L -c -x -d ./ -I ../gsoap-2.8/gsoap:../gsoap-2.8/gsoap/import/:../gsoap-2.8/gsoap/custom/ onvif.h
解释:../gsoap-2.8/gsoap:../gsoap-2.8/gsoap/import/:../gsoap-2.8/gsoap/custom/ 这个相对路径是gsoap源码的路径(已经编译和安装过后的gsoap),其实就是在onvif目录下编译,需要使用gsoap的源码支撑,来生成对应的文件。
结果如下:
8.拷贝代码(一定不要乱拷贝,有些C文件有用,但是头文件没用,切记看清楚再拷贝),
从gsoap-2.8拷贝下面的代码,到onvif目录下:
gsoap/dom.c gsoap/stdsoap2.c gsoap/stdsoap2.h gsoap/custom/duration.c gsoap/plugin/mecevp.c gsoap/plugin/mecevp.h gsoap/plugin/smdevp.c gsoap/plugin/smdevp.h gsoap/plugin/threads.c gsoap/plugin/threads.h gsoap/plugin/wsaapi.c gsoap/plugin/wsaapi.h gsoap/plugin/wsseapi.c gsoap/plugin/wsseapi.h9.编译
自己写个测试文件,编译的时候记得加上参数:-DWITH_OPENSSL -DWITH_DOM –DDEBUG
下一遍贴:onvif的实例代码,已测通。



