当前位置: 首页 > Linux

使用gSOAP生成ONVIF框架(C++)

时间:2023-04-06 03:09:26 Linux

0背景介绍ONVIF接口已经被视为监控摄像头的标准配置。为了方便快捷的开发一个可以连接ONVIF摄像头的NVR,需要搭建一个ONVIF客户端。下面重点介绍如何使用gSOAP技术根据WSDL文件生成我们需要的ONVIF框架代码。0.1ONVIFONVIF:开放网络视频接口论坛。为视频监控和其他物理安全领域的IP产品如何相互通信创建了标准。该标准也可称为ONVIF标准。注:ONVIF框架一般由gSOAP工具生成,成本高,难以手工实现。0.2gSOAPgSOAP:提供基于C/C++语言的SOAP实现。注意:要通过gSOAP生成C/C++框架,需要WSDL文件。ONVIFWSDL文件由ONVIF官方社区提供。0.3WSDLWSDL:网络服务描述语言(WebServicesDescriptionLanguage)。它是一种为描述Web服务而发布的XML格式。注意:只有SOAP方式实现的WebServices有WSDL文档,其他方式实现的WebServices没有WSDL文档。0.4SOAPSOAP:简单对象访问协议(SimpleObjectAccessProtocol)。它是用于交换数据的协议规范。它是一种轻量级、简单、基于XML(标准通用标记语言的子集)的协议,旨在在WEB上交换结构化和固化的信息。.XML:可扩展标记语言。它是标准通用标记语言的一个子集,一种用于标记电子文档以使其结构化的标记语言。标准通用标记语言:也称为标准通用标记语言。是当今创建结构化文档描述语言规则的策略集合。注:SOAP相当于HTTP的数据部分,HTTP是对SOAP消息的封装。0.5总结网络摄像机的目的是实现不同机器、不同进程之间的数据交换。HTTP技术在网络数据交换中是不可替代的,所以网络摄像机更像是使用HTTP技术来实现数据交换,数据是SOAP格式的。1开发环境1.1操作系统Ubuntu18.041.2预安装安装flex、bison、libssl-dev、unzip、ffmpeg等工具sudoapt-getinstallflexbisonlibssl-devunzipzlib1g-devffmpeg1.3安装gSOAP工具下载gSOAP源码解压gSOAP进入gsoap-2.8目录,执行配置脚本执行make命令执行makeinstall命令unzipgsoap_2.8.*.zipcdgsoap-2.8./configuremakesudomakeinstall1.4目录结构新建onvifclientfolder在onvifclient文件夹下新建tmp文件夹Copy到gsoap-2.8源码下的gsoap目录到onvifclient文件夹mkdironvifclientcdonvifclientmkdirtmpcppath/to/gsoap./-r2选择WSDL文件2.1启用ONVIF支持根据自己的相机品牌,搜索对应的ONVIF协议开启方法。比如海康威视IPC如何开启ONVIF,大华摄像头如何开启ONVIF2.2设备能力,网上搜索,下载安装ONVIFDeviceTestTool,运行ONVIFDeviceTestTool获取摄像头的能力。方法:发现设备,切换到Debug选项卡,选择GetServices按钮,分析右侧信息,确定设备的能力。2.3选择wsdl根据设备能力或者自己的需要选择wsdl文件,也可以直接全选。方法:右键对应的wsdl链接,选择复制链接,将链接保存在txt文件中,以备后用3生成ONVIF框架3.1生成并修改onvif.h文件进入onvifclient目录,使用wsdl2h命令生成onvif.h文件并修改onvif.h文件#生成onvif.h文件wsdl2h-c++-O4-P-x-oonvif.h-t./gsoap/typemap.dat\https://www.onvif.org/ver20/analytics/wsdl/analytics.wsdl\https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl\https://www.onvif.org/ver10/events/wsdl/event.wsdl\https://www.onvif.org/ver20/imaging/wsdl/imaging.wsdl\https://www.onvif.org/ver10/media/wsdl/media.wsdl\https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl\https://www.onvif.org/ver10/deviceio.wsdl\https://www.onvif.org/ver10/recording.wsdl\https://www.onvif.org/ver10/search.wsdl\https://www.onvif.org/ver10/replay.wsdl\#加入认证,发送请求需要用户名和密码sed-i'122a#import"wsse.h"'onvif.h#加入wsdd,用于发现网络中的设备sed-i'122a#import"wsdd5.h"'onvif.h3.2根据onvif.h生成C++代码框架使用soapcpp2命令生成C++代码复制需要的文件#Generate.cpp.h.nsmap等文件soapcpp2-2-c++-C-L-x-j-ronvif.h-dtmp/-I./gsoap/-I./gsoap/import/-I./gsoap/custom/#Copy需要文件到tmp,比如dom.cpp文件,custom文件夹,gsoap下的plugin文件夹,根据实际需要复制3.3实现设备发现功能编译时添加-DWITH_OPENSSL-DWITH_DOM-DWITH_ZLIB等参数引用libcrypto.solibssl。solibz.so等动态库设备发现函数伪代码#include#include"wsdd.namap"#include"soapwsddProxy.h"intmain(){结构wsdd__ProbeType请求;结构__wsdd__ProbeMatches代表;wsdd测试。soap_endpoint="soap.udp://239.255.255.250:3702";wsddTest.send_Probe(&req);wsddTest.recv_ProbeMatches(代表);for(inti=0;i__sizeProbeMatch;i++){std::cout<ProbeMatch->XAddrs<