ONVIF开发(1)生成开发框架

前景提要:

我想用ONVIF开发一个client,实现最简单的发现一个IPC摄像头,但是网上找了一圈感觉没有头绪,所以绝知此事要躬行,不管三七二十一,找一个教程开干。

(1)下载gsoap

  官网下载就不要想了,能慢到怀疑人生,所以我是在git上下载的(git真的是个宝藏),在git上搜索gsoap_2.8.53即可

(2)wsdl文件介绍
  remotediscovery.wsdl :用于发现设备
  devicemgmt.wsdl :用于获取设备参数
  media.wsdl:用于获取视频流地址
  ptz.wsdl:用于设备的PTZ控制

  我觉得我有上述四个文件足够了

(3)下载wsdl文件
  https://www.onvif.org/profiles/specifications/
  选择想要的wsdl文件,右键文件链接--另存为--保存到本地(我发现最新的好像少了几个文件,所以。。。上git,下老版,搜python-onvif,第一个就是,其中的wsdl就是人家下好的,直接使用吧)

(4)新建工作空间
  创建新建文件夹OnvifFramework
  将goap_2.8.53\gsoap-2.8\gsoap 路径下的typemap.dat,拷贝到OnvifFramework
  将gsoap_2.8.53\gsoap-2.8\gsoap\bin\win32 路径下的wsdl2h.exe soapcpp2.exe,拷贝到OnvifFramework
  将下载的wsdl文件放在和wsdl2h.exe soapcpp2.exe同一路径下(注意:其中包含文件 onvif.xsd ,types.xsd ,b-2.xsd ,bf-2.xsd,r-2.xsd,t-1.xsd ,ws-addr.xsd ,ws-discovery.xsd 。这些文件和wsdl文件一样从官网上下载--可惜现在官网上木有)。

(5)生成onvif.h文件
  只使用上述四个文件,生成onvif.h文件,执行命令
  wsdl2h -o onvif.h -c -s -t ./typemap.dat remotediscovery.wsdl devicemgmt.wsdl media.wsdl ptz.wsdl
  参数说明:
  -c : 生成c风格代码(注:后缀名还是.cpp ,但实际上是.c)
  -c++:生成c++风格代码(注 : 默认是生成c++代码)
  -x : 表示不生成xml 文件(注:生成的xml文件,有助于了解发送是SOAP是怎样的结构,建议不使用-x)
  -l : 表示指定导入路径
  -C : 表示生成客户端代码
  -S : 表示生成服务端代码
  -s : 不使用STL代码
  -o: 生成.h文件叫什么名字
  -t : 后面紧跟“typemap.dat”这个批处理文件
  执行完该命令后,可以在当前目录变成如下(没有如下,懒得截图),其中增加了onvif.h文件,该文件是接下来生成框架代码的前提:

(6)正式生成框架代码

  在项目开发过程中,往往需要使用“鉴权”这项功能(访问或修改设备参数,需要用户名跟密码,在数据传输过程中,密码是进行了加密处理的),所以在正式生成代码之前在onvif.h文件中加上下面的代码:
  #import "wsse.h"
  这样在接下生成的框架代码中才有相应的加密函数接口(注意:在Linux环境下,一定要安装openssl库)。
==>准备工作
  (1)将gsoap_2.8.14\gsoap-2.8\gsoap\import拷贝到同gsoapcpp2.exe文件夹下
  (2)将gsoap_2.8.14\gsoap-2.8\gsoap\custom拷贝到同gsoapcpp2.exe文件夹下
==>执行命令
  通过cmd进入到gsoapcpp2.exe所在文件夹,执行一下命令:soapcpp2 -2 -c onvif.h -I .\custom -I .\import -I .\import
  参数解析
  -c : 生成c风格的代码,因为默认是c++风格的代码
  -2:采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到
  -I : 指定路径
  -x : 不产生xml 文件(不建议是用该选项,xml在开发中具有参考意义)
注意:可以是用以下命令查看各个参数的详细作用
  gsoapcpp2 -help

  执行完以上命令后,提示Compilation successful (2 warnings),
  可以看见当前文件夹下出现了很多.h文件、.c文件、.nsmap文件、.xml文件
  Q:wsa5.h(288): **ERROR**: service operation name clash: struct/class 'SOAP_ENV__Fault' already declared at wsa.h:273
  A:打开gsoap_2.8.17\gsoap-2.8\gsoap\import 路径下的wsa5.h, 将277行的SOAP_ENV__Fault结构体注释掉(改成其他名字亦可)

(7)提取所需文件
  将soapC.c , soapH.h , soapClient.c , soapClientLib.c , soapServer.c(用于服务端/设备端的开发) , soapServerLib.c(用于服务端/设备段的开发) soapStub.h , onvif.h(该文件基本已经没有用处了)拷贝到一个单独的文件夹"ONVIF"下面。
  将文件gsoap-2.8\gsoap\dom.c拷贝到ONVIF中(该文件好像没什么作用)
  将文件gsoap-2.8\gsoap\custom\duration.c拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\custom\duration.h拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\mecevp.c拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\mecevp.h拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\smdevp.c拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\smdevp.h拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\stdsoap2.h拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\stdsoap2.c拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\threads.c拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\threads.h拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\wsaapi.c拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\wsaapi.h拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\wsseapi.h拷贝到ONVIF中
  将文件gsoap-2.8\gsoap\plugin\wsseapi.c拷贝到ONVIF中
  将生成的.nsmap文件中的任意一个(因为生成的.nsmap文件中的内容都是一样的)拷贝到ONVIF中
拷贝完成,ONVIF文件中所有文件如下所示:
  dom.c
  duration.c
  duration.h
  mecevp.c
  mecevp.h
  onvif.h
  smdevp.c
  smdevp.h
  soapC.c
  soapClient.c
  soapClientLib.c
  soapH.h
  soapServer.c
  soapServerLib.c
  soapStub.h
  stdsoap2.c
  stdsoap2.h
  threads.c
  threads.h
  wsaapi.c
  wsaapi.h
  wsdd.nsmap
  wsdd.h
  wssepi.c
  wsseapi.h
  
(8)开发
  利用以上框架代码,新建main.c就可以开始项目开发了。
  <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
  都走到这步了,就再找个教程开发吧。

参考文档
https://www.cnblogs.com/big-devil/p/7625763.html  不是太全,但是流程非常清晰,跟着走一遍后思维清晰很多,我就是完全按照这个生成的

https://blog.csdn.net/saloon_yuan/article/details/24901597 上面不全的地方,这篇里面刚好有补充,比如FAQ,比如wsdd.nsmap改后缀为h

原文链接: https://www.cnblogs.com/jieliujas/p/12409588.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    ONVIF开发(1)生成开发框架

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/371159

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月3日 上午10:37
下一篇 2023年3月3日 上午10:38

相关推荐