利用gSoap搭建ONVIF客户端代码框架

搭建 ONVIF IPC客户端开发框架

基本环境搭建

系统:Vmware workstations 安装ubuntu系统,系统版本:ubutu 18.04.3 LTS。
软件:安装gcc、g++、make、openssl、ssh2等基本工具。

下载gSoap源码

gSoap 工具下载地址:http://sourceforge.net/projects/gsoap2
下载gSoap工具的版本是:gsoap_2.8.97

gSoap源码编译

3.1 源码解压

unzip gsoap_2.8.97.zip  #源码解压

3.2 安装gSoap编译依赖工具

3.2.1 阅读gSoap解压的INSTALL.txt文件中,关于《Installing gSOAP on Unix/Linux》的说明,防止安装出现问题,先检查下依赖是否安装,依赖的工具如下:

- Automake tools installed (make and GNU m4)
- Bison installed from www.gnu.org/software/bison or Yacc
- Flex installed from flex.sourceforge.net
- OpenSSL from www.openssl.org or GNUTLS from www.gnu.org/software/gnutls
- Optionally Zlib to support compression from www.zlib.net.

3.2.2 在步骤1已经安装过make工具,所以先安装Bison工具:

apt-get install bison

3.2.3 安装Flex工具

apt-get install flex

3.2.4 安装OpenSSL

apt-get install openssl 

在这里插入图片描述
发现系统已经自带了openssl工具,且是最新的openssl库,满足INSTALL.txt的要求,故不需要安装openssl了。

3.2.5 安装zlib工具

apt-get install zlib1g-dev  #注:zlib工具的名称是zlib1g-dev,而不是zlib

3.2.6 gSoap源码编译

cd gsoap-2.8/
./configure --with-openssl=/usr/lib/ssl  #指明openssl的库路径
Make && make install

安装完成后,通过如下命令检查安装是否成功:
利用gSoap搭建ONVIF客户端代码框架_第1张图片
如上图所示,gSoap源码编译后,生成wsdl2h 和 soapcpp2工具,查看这两个工具的版本,版本应该与gSoap源码版本保持一致,均为2.8.97。
至此,软件环境已经全部搭建完成,下面的工作就是利用gSoap源码编译生成的wsdl2h 和 soapcpp2工具生成ONVIF IPC 客户端开发框架。
关于如何使用gSoap工具将ONVIF 标准提供的服务转换为C/C++代码可以参考如下链接:https://www.genivia.com/resources.html#How_do_I_use_gSOAP_with_the_ONVIF_specifications?

利用wsdl2h工具生成onvif.h文件

利用wsdl2h工具生成ovnif.h文件的过程如下图所示:
利用gSoap搭建ONVIF客户端代码框架_第2张图片
按照上面链接的要求,需要检查gSoap源码目录下typemap.dat文件是否有如下内容:

利用gSoap搭建ONVIF客户端代码框架_第3张图片
查看gsoap 2.8.97版本下的typemap.dat文件,包含这部分内容,所以就不需要再typemap.dat文件中添加上述内容。

搭建ONVIF客户端代码框架,按照ONVIF Profile S标准需要支持下面所示的基本服务:

功能模块 Wsdl文件地址
设备发现 https://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdl
设备管理 https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl
媒体服务 https://www.onvif.org/ver10/media/wsdl/media.wsdl

在gsoap源码目录下,新建onvif_client/onvif文件夹,存放onvif.h文件

cd gsoap-2.8/ && mkdir -p onvif-client/onvif/
cd gsoap/
 wsdl2h -O4 -P -x -c -s -t ./typemap.dat -o ../onvif-client/onvif/onvif.h  https://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdl https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl

利用gSoap搭建ONVIF客户端代码框架_第4张图片
上述命令执行完成后,执行成功,输出信息如上图所示,根据图片最后的提示,为了最终生成onvif.h文件还需要执行如下命令:

soapcpp2 ../onvif-client/onvif/onvif.h

执行上面命令,会返回如下错误:
利用gSoap搭建ONVIF客户端代码框架_第5张图片
错误原因,是因为onvif.h包含的wsdd10.h 和 wsa5.h两个头文件,而头文件wsdd10.h又包含wsa.h这个头文件,头文件wsa.h和wsa5.h中对SOAP_ENV__Fault重复定义了,坚决方法:注释掉wsa5.h中关于SOAP_ENV__Fault的定义,执行下面命令即可:

soapcpp2 ../onvif-client/onvif/onvif.h -I import/

下面列举wsdl2h命令所用参数的含义,便于理解:
利用gSoap搭建ONVIF客户端代码框架_第6张图片

使用soapcpp2工具生成onvif客户端代码框架

因为客户端调用服务端提供的大部分接口,需要校验用户名和密码,在onvif.h文件中还需要添加wsse.h头文件:

#import "wsse.h"

利用soapcpp2工具生成客户端代码框架在这里插入图片描述
具体命令如下:

cd /home/ydd/share/gsoap-2.8/gsoap
soapcpp2 -2 -L -C -c -x -I ./import/ -d ../onvif-client/onvif/ ../onvif-client/onvif/onvif.h

利用gSoap搭建ONVIF客户端代码框架_第7张图片
上述命令执行成功,在终端输出的信息如上图所示,相应的c代码如下图所示:
利用gSoap搭建ONVIF客户端代码框架_第8张图片
利用gSoap搭建ONVIF客户端代码框架_第9张图片
拷贝其他需要的文件到客户端目录下
从gSoap源码目录下,将后续需要用到的文件拷贝到客户端目录下,命令如下:

cd /home/ydd/share/gsoap-2.8/gsoap	#切换到gsoap目录下
cp plugin/wsaapi.h plugin/wsaapi.c ../onvif-client/onvif/		#拷贝鉴权相关代码
cp plugin/wsseapi.c plugin/wsseapi.h ../onvif-client/onvif/  
cp plugin/smdevp.c plugin/smdevp.h ../onvif-client/onvif/
cp plugin/mecevp.c plugin/mecevp.h ../onvif-client/onvif/
cp plugin/threads.c plugin/threads.h ../onvif-client/onvif/
cp ./dom.c ../onvif-client/onvif/
cp stdsoap2.h stdsoap2.c ../onvif-client/onvif/		#拷贝soap 1.2 源码

修改stdsoap2.c源文件
在onvif-client\onvif\stdsoap2.h中有命名空间「namespaces变量」的定义声明,如下所示:

extern SOAP_NMAC struct Namespace namespaces[];

但「namespaces变量」的定义实现,是在samples\onvif\wsdd.nsmap文件中,为了后续应用程序要顺利编译,修改samples\onvif\stdsoap2.c文件,在开头加入:

#include "wsdd.nsmap"

此时onvif.h文件没什么作用了,可以删除,几个后缀为nsmap文件的内容都一样,只保留wsdd.nsmap即可,至此,ONVIF IPC客户端开发框架基本完成:
利用gSoap搭建ONVIF客户端代码框架_第10张图片

代码框架获取

编译好的代码框架已放到个人github上,https://github.com/zhu457823/onvif-ipc-server

参考资料

  1. gSoap使用指导:https://www.genivia.com/dev.html
  2. ONVIF官网:https://www.onvif.org/
  3. ONVIF Profile S:https://www.onvif.org/profiles/profile-s/
  4. ONVIF Profile G:https://www.onvif.org/profiles/profile-t/
  5. ONVIF Core Specification :https://www.onvif.org/specs/core/ONVIF-Core-Specification.pdf
  6. CSDN优质博文:https://blog.csdn.net/benkaoya/article/details/72424335
  7. https://www.genivia.com/resources.html#How_do_I_use_gSOAP_with_the_ONVIF_specifications?
  8. https://blog.csdn.net/weixin_44362642/article/details/86749042

你可能感兴趣的:(ONVIF,IPC)