onvif学习4-代码实现

代码和更多信息请看:http://bbs.csenn.com:88/thread-65-1-1.html



前言:
onvif 的过程十分痛苦,什么 wsdl soap webserver ,全部都是没有接触过的,还好有 gsoap 可以用,在网上和群共享里面只有 2.8.3 版本实现过程,而且比较麻烦的是要自己实现 probe 所有细节。
2.8.11 中, wsddapi 插件为我们设计好了 wsdd 的接口,我们要做的就是填充 brobe matches 信息就可以了。简化了开发过程,也不必用高手们做的 typemap 文件,因为这些看不懂的文件让我们对做出的程序毫无信心。

生成.h文件。
我们需要从 onvif 官网下载 wsdl 文件,和 onvif.xsd 文件。然后生成 .h 文件
wsdl2h -sck -t /opt/nfshost/gsoap-2.8/gsoap/typemap.dat  -o onvif.h analytics.wsdl analyticsdevice.wsdl devicemgmt.wsdl display.wsdl event.wsdl imaging.wsdl media.wsdl ptz.wsdl receiver.wsdl recording.wsdl remotediscovery.wsdl replay.wsdl search.wsdl deviceio.wsdl
这一步你会发现生成速度非常慢,还会提示找不到 onvif.xsd ,速度慢得原因是 wsdl2h 会根据 wsdl 中引用去网上下载一下 xsd wsdl 文件,我们可以将这些文件下载到本地,然后修改 wsdl 中的路径。
01.png
修改之前 schemaLocation 是一个 url ,如果你放的和你 onvif wsdl 文件相同的目录中,这样写就 ok 了,如果不是,可以写上相对路径。

修改生成的onvif.h文件
增加一句#import "wsse.h",用于身份验证,具体怎么用还不知道。求帮助

生成代码
soapcpp2 -2 -L -c -x -d ../  -I /opt/nfshost/gsoap-2.8/gsoap:/opt/nfshost/gsoap-2.8/gsoap/import/:/opt/nfshost/gsoap-2.8/gsoap/custom/  onvif.h
生成的过程中会出现SOAP_ENV__Fault重复定义,注视掉 wsa5.h 中得内容就行了
02.png
好了,我们的代码已经生成。
03.png
每个文件具体作用请见查看文档。
plugin中得文件拷贝到工程、
    gsoap/dom.c
    gsoap/stdsoap2.c
    gsoap/stdsoap2.h
    gsoap/custom/duration.c
    gsoap/plugin/mecevp.c
    gsoap/plugin/mecevp.h
    gsoap/plugin/smdevp.c
    gsoap/plugin/smdevp.h
    gsoap/plugin/threads.c
    gsoap/plugin/threads.h
    gsoap/plugin/wsaapi.c
    gsoap/plugin/wsaapi.h
    gsoap/plugin/wsseapi.c
gsoap/plugin/wsseapi.h
gsoap/plugin/wsddapi.c
    gsoap/plugin/ wsddapi.h
04.png
现在我们的 webserver 中有了这些文件了。

实现接口
Gsoap soapStub.h 中为我们定义了的函数,我们必须要实现,当然不是要一下子写完,你可以写个空的函数,新建一个 c 文件,将函数实现。
05.png
记住一点, WSDD 域的方法已经在 wsddapi 实现。 __wsdd_ 开头的函数不需要实现。
06.png
Wsddapi 需要你实现一些 event 接口。这个接口是以上函数用来获取信息的,只要将信息填充就可以了。
我的 probe 是这样实现的,当然是最初步的实验,没有信息获取过程
07.png
    soap_wsdd_init_ProbeMatches(soap,matches);
    soap_wsdd_add_ProbeMatch(soap,matches,
        "urn:uuid:464A4854-4656-5242-4530-313035394100",
        "dn:NetworkVideoTransmitter",
        "onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/type/audio_encoder onvif://www.onvif.org/hardware/IPC-model onvif://www.onvif.org/name/IPC-model",
        NULL,
        "http://192.168.20.143/onvif/device_service",1);
以上两行就可以实现 probe, 是不是很 easy 啊。
Wsddapi 文件此时还是编译不过去的,因为默认使用的是 wsa5 ,而 wsdd 定义的是 wsa ,所以我们修改 soapStu.h
08.png
注释掉 soap_wsa_2005, 此时,我们的 webserver 可以编译通过了。

监听组播信息
当然,我们还需要监听组播消息。我们此时调用 wsaapi 中得 listen 方法就可以了。
09.png

编译
做完以上的内容 ,我们的 onvif 框架已经完成,现在开始编译咯
编译的时候记得加上一下参数
-DWITH_OPENSSL -DWITH_DOM –DDEBUG
Run!!!
10.png
发现设备了


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值