参考了: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网络不能访问。
解决:
发现是我的路由器有问题,换其它网络后可访问。
4,在Onvif Device Test Took中执行GetCapability和GetServices命令时,总是提示:error in deserializing body of reply message for operation 'getcapabilities'.
 后来发现是我去掉wss.h了定义的namespaces中一些值引起的(调试过程中怀疑是那些值引起discovery不通,去掉了)。
 
重要参考资料:
IPC-camera端模拟器, http://www.happytimesoft.com/products/multi-onvif-server/index.html
ONVIF Device Test Tool:  在www.onvif.org中搜索并下载。

 
 

goasp-onvif实现nvr server问题点滴的更多相关文章

  1. ONVIF让NVR与网络监控摄像机更"亲密"

    NVR的发展目前看主要分为二大类,一类是接入级的嵌入式NVR,其主要针对主流的IP摄像机研发的一种NVR. 另一类是针对社区和平安城市级的大型NVR,其主要采用的是以高端服务器软.硬件结构为基础,以传 ...

  2. onvif协议client与server对接

    happytimesoft有完整的c语言开发的onvif client和server,一共1000$,真便宜,haha. http://www.happytimesoft.com/products/m ...

  3. html5 live stream

    一.传统的安防监控/流媒体音视频直播基本架构 A/V device 信号采集(yuv/rgb) ---> 转码(h264/265) ---> 网络推送(rtsp/rtmp/http/onv ...

  4. linux 程序启动与停止管理脚本

    公司接了一个第三方的系统,基于linux写的几个程序,一共有9个部件,第三方没有给脚本,每次启动或停止都得一个一个手工去停止或修改.......,这里稍微鄙视下. 没办法,求人还不如自己动手写, 需求 ...

  5. onvif规范的实现:server端Discovery实现,通过OnvifTestTool12.06测试

    说明:网上关于ONVIF开发的文章并不多,也更找不到具体的实例来入门学习.只能靠翻阅各种Specification摸索中前进,下面是最近几天的成果.调通了服务端(或者说设备端)的Discovery,使 ...

  6. sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同

    原文:sql点滴38—SQL Server 2008和SQL Server 2008 R2导出数据的选项略有不同 说明: 以前要将一个表中的数据导出为脚本,只有用存储过程.现在在SQL Server ...

  7. SQL点滴12—SQL Server备份还原数据库中的小把戏

    原文:SQL点滴12-SQL Server备份还原数据库中的小把戏 备份数据库时出现一个不太了解的错误 ,错误信息“is formatted to support  1 media families, ...

  8. SQL点滴15—在SQL Server 2008中调用C#程序

    原文:SQL点滴15-在SQL Server 2008中调用C#程序 T-SQL的在执行普通的查询的时候是很高效的,但是在执行循环,判断这样的语句的时候效率就不那么的高了.这时可以借助CLR了,我们可 ...

  9. SQL点滴7—使用SQL Server的attach功能出现错误及解决方法

    原文:SQL点滴7-使用SQL Server的attach功能出现错误及解决方法 今天用SQL Server 2008的attach功能附加一个数据库,出了点问题,提示的错误是: Unable to ...

随机推荐

  1. 微信小程序开发资源整理

    有兴趣学习微信小程序开发的可以关注简书专题 微信小程序开发 由于微信已经开发文档和开发工具了,所以下面的内容用处不大了. 具体参考:http://mp.weixin.qq.com/wiki/ 这篇文章 ...

  2. 易位构词EOJ3451【字符串】【思维题】【模拟】

    http://acm.ecnu.edu.cn/problem/3451/ 官方题解: 我们可以先考虑字符串有序的情况,比如是 aaabcc,我们只要将字符串右移 3 位,变成 bccaaa,就做完了. ...

  3. hdu5289 RMQ+二分

    RMQ预处理最大值,最小值,然后对于每一点,二分可能满足的区间长度,长度-1就是该店开始的区间满足的个数. #include<stdio.h> #include<string.h&g ...

  4. 看看国外的JavaScript题目

    ---恢复内容开始--- 题目一 (function(){    return typeof arguments;})(); 答案:“object” arguments是对象,伪数组有两件事要注意这里 ...

  5. @codeforces - 1153F@ Serval and Bonus Problem

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 从一条长度为 l 的线段中随机选择 n 条线段,共 2*n 个线 ...

  6. 5 获取Form表单取值

    #form表达提交@app.route("/data",methods=['GET','POST']) #methods 让当前路由支持GET 和 POST 方式def data( ...

  7. hdu 2312 Cliff Climbing (pfs)

    Problem - 2312 一条很暴力,有点恶心的搜索.题意其实很简单,主要是pfs的时候拓展结点会有种麻烦的感觉.注意的是,这里的n和m跟平常见到的有所不同,交换过来了.我的代码就是在因为这个长宽 ...

  8. ORACLE| ORACLE基础语法汇总

    创 ORACLE| ORACLE基础语法汇总 2018-07-18 16:47:34 YvesHe 阅读数 9141更多 分类专栏: [数据库]   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  9. Bert系列(三)——源码解读之Pre-train

    https://www.jianshu.com/p/22e462f01d8c pre-train是迁移学习的基础,虽然Google已经发布了各种预训练好的模型,而且因为资源消耗巨大,自己再预训练也不现 ...

  10. zoj 3859 DoIt is Being Flooded (MFSet && Flood Fill)

    ZOJ :: Problems :: Show Problem 这题开始的时候想不到怎么调整每个grid的实际淹没时间,于是只好找了下watashi的题解,发现这个操作还是挺简单的. ZOJ3354 ...