栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Linux gsoap生成onvif框架(C语言客户端代码)一

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux gsoap生成onvif框架(C语言客户端代码)一

创作人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源码时会用到

三、下载和安装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.h

9.编译

        自己写个测试文件,编译的时候记得加上参数:-DWITH_OPENSSL -DWITH_DOM –DDEBUG

下一遍贴:onvif的实例代码,已测通。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/511164.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号