当前位置 : 主页 > 大数据 > 区块链 >

goasp-onvif实现nvr server问题点滴

来源:互联网 收集:自由互联 发布时间:2021-06-22
参考了: https://blog.csdn.net/saloon_yuan/article/details/24901597 ,本文以原贴为基础做了一些修改,非常感谢原作者。 1:开发框架搭建 1:gsoap官网( http://gsoap2.sourceforge.net/ )下载最新版gsoap(本次
参考了: https://blog.csdn.net/saloon_yuan/article/details/24901597 ,本文以原贴为基础做了一些修改,非常感谢原作者。   1:开发框架搭建      1:gsoap官网( http://gsoap2.sourceforge.net/)下载最新版gsoap(本次版本为gsoap_2.8.91)并解压。      2:新建一个文件夹(OnvifFramework)            将解压的gsoap_2.8.91文件拷贝至OnvifFramework目录下            将gsoap_2.8.91\gsoap 路径下的typemap.dat以及gsoap_2.8.91\gsoap\bin\win32 路径下的wsdl2h.exe  soapcpp2.exe也拷贝至该目录下。      3: Onvif官网( http://www.onvif.org/Documents/Specifications.aspx)页面里ONVIF WSDL and XML Schemas Specifications找到各wsdl(18个左右)并下载下来            (右键另存为即可),放入GenerateSource文件夹中。      4:生成onvif.h            相关的依赖文件,并且对文件路径有如下要求:             OnvifFramework                          ----level1                               ----level2                                    ----GenerateSource                                          ----typemap.dat                                          ----wsdl2h.exe                                          ----soapcpp2.exe           ......那些扩展名为wsdl的文件                                      ----ver10                                           ----device                                                  ----wsdl                                                         ----devicemgmt.wsdl                                           ----media                                                 ----wsdl                                                       ----media.wsdl                                          ----schema                                                ----onvif.xsd                          ----ver10                              ----schema                                     ----onvif.xsd             过程中如果还提示少某个文件,可以再新建目录,拷进去对应的文件。打开CMD,切换至GenerateSource目录下,将如下指令贴到CMD窗口中回车运行即可生成onvif.h文件:           wsdl2h -o onvif.h  -c  -s -t  ./typemap.dat  remotediscovery.wsdl  devicemgmt.wsdl analytics.wsdl  analyticsdevice.wsdl  media.wsdl  deviceio.wsdl  display.wsdl  event.wsdl imaging.wsdl  recording.wsdl  replay.wsdl search.wsdl  receiver.wsdl  ptz.wsdl           结果信息如下图所示:                             注:生成的时候可能会出现如下错误:                 wsa5.h(290): **ERROR**: remote method nameclash: struct/class ‘SOAP_ENV__Fault‘ already declared at line 274                 解决办法如下:                 打开gsoap_2.8.17\gsoap-2.8\gsoap\import 路径下的wsa5.h, 将277行的SOAP_ENV__Fault结构体注释掉(改成其他名字亦可) 我在这步时总会出现: Cannot connect to https site: SSL/TLS support not enabled in this version,但我只是个人调研,不能下载支持SSL的版本,所以我实际是在linux系统中执行的这个命令。         5:通过onvif.h生成源代码框架             将如下指令贴到CMD窗口中回车运行即可:             soapcpp2 -2  -c  onvif.h  -x -I  ..\..\..\gsoap_2.8.191\gsoap\import -I ..\..\..\gsoap_2.8.91\gsoap 直接按命令行里的提示,执行:soapcpp2 convif.h也行,我就是这样使用。             看到下图中的Compilation successful即可:                  我在这一步提示了‘SOAP_ENV__Fault‘ already declared这个错,修改文件也解决不了,实在没办法就没有管它,似乎不影响最后的使用。        6:生成文件代码文件如下:                                     最后做如下修改                  1.后缀为nsmap的命名空间文件内容都一样,保留一个即可,后缀改为.h文件(wsdd.nsmap更名为wsdd.h), 使用时一定要包含这个文件                  2.删除soapClientLib.c和soapServerLib.c文件。                  3.将gsoap-2.8.91/gsoap下的stdsoap2.h和stdsoap2.c文件和gsoap-2.8.91/gsoap/custom下的duration.c文件都拷贝到当前目录下                          最终的文件如下:                           至此Onvif的开发环境框架已经完成,客户端的开发使用soapClient.c文件;服务端开发使用soapServer.c即可。不论客户端还是服务端,stdsoap2都是需要的。   2:延申 将这些文件包含进自己的APP,编译后有大量的链接错误。我理解那些函数需要我们自己实现,这些文件只是提供了一个框架,具体功能需要我们自己实现以后才能完整。 摄像头上需要实现服务端,而不是客户端。 3:问题及解决   1,在windows端运行时提示:Cannot connect to https site: SSL/TLS support not enabled in this version. Visit https://www.genivia.com/downloads.html to download the secure version of wsdl2h.exe that supports SSL/TLS to connect to https sites. 解决: 使用linux版本 2,将这些文件编译进自己的APP,链接时提示::undefined reference to namespaces 解决: CFLAGS 添加: -DWITH_NONAMESPACES, 选一个文件包含wsdd.h文件,即中间过程中生成的那些内容一样的扩展名为nsmap的文件。 3,onvif网络不能访问。 解决: 发现是我的路由器有问题,换其它网络后可访问。
网友评论