Onvif框架的搭建

在搭建Onvif框架之前,先简单了解一些概念及工具:

概念

  • WSDL

    WSDL是web service description language(web service描述语言),是一个用来描述web服务和说明如何与web服务通信的xml语言,为用户提供详细的接口说明。

  • SOAP

    SOAP是simple object access protocol(简单对象访问协议)的缩写,是基于XML的一种协议,被设计成在WEB上交换结构化的固化信息。

  • gSOAP工具

    gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来,通过将WSDL文件解析序列化为C/C++文件,最小化了web service的开发过程。

开发流程
获取WSDL文件 -> 利用gSOAP工具编译为C/C++源文件 -> 业务逻辑的开发 -> 编译并发布

Onvif协议的一些常用WSDL文件地址

http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl 

http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl 

http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl 

http://www.onvif.org/onvif/ver10/recording.wsdl  

http://www.onvif.org/onvif/ver10/display.wsdl  

http://www.onvif.org/onvif/ver10/receiver.wsdl 

http://www.onvif.org/onvif/ver10/deviceio.wsdl 

http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl  

http://www.onvif.org/onvif/ver10/search.wsdl 

gSOAP工具的编译

  • 我使用的gSOAP工具版本是gSOAP_2.8.66.zip,编译gsoap前,可能需要预先安装一些依赖库,我的工作环境为Ubuntu 16.04.3 LTS,安装的依赖库有:bison,flex,onepssl,如果编译过程提示需要其它工具或者库,请自行安装。

Onvif的框架生成

  • gSOAP工具已经编译并安装,且wsdl的文件地址也已经,所以可以根据自己的需求来选择需要的wsdl文件,并利用gsoap中的工具把wsdl解析(可以用已知的WSDL地址在线解析,也可以先把wsdl文件下载到本地实现离线解析)并生成C或者C++源文件。我使用到了如下解析命令行(详细过程参考:https://blog.csdn.net/benkaoya/article/details/72466827):
wsdl2h -P -x -c -s -t ./typemap.dat -o samples/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 http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl

生成框架命令:

soapcpp2 -2 -C -L -c -x -I import:custom -d samples/onvif/ samples/onvif/onvif.h

拷贝文件到onvif目录:
cp stdsoap2.c stdsoap2.h plugin/wsaapi.c plugin/wsaapi.h custom/duration.c custom/duration.h dom.c samples/onvif/
cp ./gsoap/plugin/smdevp.c gsoap/samples/onvif/
cp ./gsoap/plugin/smdevp.h gsoap/samples/onvif/
cp ./gsoap/plugin/threads.* gsoap/samples/onvif/(好像没什么大用处)
cp ./gsoap/plugin/wsseapi.c gsoap/samples/onvif/
cp ./gsoap/plugin/wsseapi.h gsoap/samples/onvif/

在使用onvif生成的框架时,会出现struct soap的结构体中没有定义namespaces,
但「namespaces变量」的定义实现,是在onvif\wsdd.nsmap文件中,为了后续应用程序要顺利编译,修改onvif/stdsoap2.c文件,在开头加入:

#include "wsdd.nsmap"

其中onvif.h文件其实已经没用了,可以删掉,不需要参与后续IPC客户端程序的编译。Onvif目录中有好多个命名空间的.nsmap文件,每个wdsl文档会生成一个.nsmap,其实文件内容都一模一样,拿其中一个来用即可,多余的个人不建议删除,通过这些.nsmap可以清楚的知道使用了哪些wsdl文件。我选择的是wsdd.nsmap。至此,Onvif的C语言框架已经生成,下面就是业务逻辑的开发了。

结束语

在这过程中,非常感谢博主:许振坪(博客地址:https://blog.csdn.net/benkaoya/article/details/72466827)写的onvif专栏,给予的帮助巨大,里面还包含onvif的相关demo,代码经过自己的精心封装,质量也很高,参考价值很大。

参考文献:
https://wenku.baidu.com/view/21128cfdba0d4a7303763a0d.html
https://blog.csdn.net/benkaoya/article/details/72466827

你可能感兴趣的:(Onvif)