ONVIF 协议开发

本文详细介绍了在Linux环境下,利用gsoap工具生成ONVIF框架的过程,包括从gsoap-2.8.31中使用wsdl2h编译工具生成onvif.h,离线生成框架代码,以及在onvif.h文件中添加安全验证代码,最后通过特定命令生成C代码,并完成框架搭建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用gsoap工具生成onvif框架过程; Linux 环境下生成 Linux C。

在上gsoap-2.8.31生成 onvif.h

(0) 使用工具:wsdl2h

   -c   产生c语言的代码,否则产生C++(默认)
   -s   不使用STL代码
   -t   指定typemap.dat文件
   -o   指定生成的头文件名

(1) 编译 wsdl2h 工具

./configure --prefix=/path/to/install
make -j2 && make install

(2) 联网生成 onvif.h

./wsdl2h  -c  -s  -t  typemap.dat  -o  onvif.h \
http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl \
http://www.onvif.org/ver10/events/wsdl/event.wsdl \
http://www.onvif.org/onvif/ver10/display.wsdl \
http://www.onvif.org/onvif/ver10/deviceio.wsdl \
http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl \
http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl \
http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl \
http://www.onvif.org/onvif/ver10/receiver.wsdl \
http://www.onvif.org/onvif/ver10/recording.wsdl \
http://www.onvif.org/onvif/ver10/search.wsdl \
http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl \
http://www.onvif.org/onvif/ver10/replay.wsdl \
http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl \
http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl

typemap.data 在 gsoap 源内,如果想离线生成,需要下载所有的wsdl文件到同目录下,运行如下命令:

./wsdl2h  -c  -s  -t  typemap.dat  -o  onvif.h \
devicemgmt.wsdl \
event.wsdl \
display.wsdl \
deviceio.wsdl \
imaging/wsdl/imaging.wsdl \
media/wsdl/media.wsdl \
ptz/wsdl/ptz.wsdl \
receiver.wsdl \
recording.wsdl \
search.wsdl \
emotediscovery.wsdl \
replay.wsdl \
analytics.wsdl \
analyticsdevice.wsdl

使用 onvif.h 生成框架代码

在使用命令通过onvif.h生成代码之前,得先确认下是否需要做安全验证,也就是所谓的鉴权。
在 onvif.h 文件上添加如下代码:

import "wsse.h" //安全验证

使用工具 soapcpp2,命令的相关命令参数如下:

   -2    //采用SOAP1.2,和SOAP1.0版本不同,会导致搜索工具搜索不到
   -x    //不产生xml文件(可用可不用,xml有一定帮助,但是太多)
   -I   //为引入路径
   -C   //只产生客户端代码(注意:C是大写,不推荐有次命令)

生成代码命令:

soapcpp2 -2 -c onvif.h -x -I ./gsoap-2.8/gsoap/import -I ./gsoap-2.8/gsoap/

修改wsdd.nsmap为wsdd.h. 删除nsmap 文件,复制./gsoap-2.8/gsoap/下的
stdsoap2.cstdsoap2.h 到当前目录下:

$ ll *.c *.h
-rw-r--r-- 1 juson juson 4.2M May 26 14:04 onvif.h
-rw-r--r-- 1 juson juson  12M May 26 14:05 soapC.c
-rw-r--r-- 1 juson juson 937K May 26 14:05 soapClient.c
-rw-r--r-- 1 juson juson  964 May 26 14:05 soapClientLib.c
-rw-r--r-- 1 juson juson 4.5M May 26 14:05 soapH.h
-rw-r--r-- 1 juson juson 815K May 26 14:05 soapServer.c
-rw-r--r-- 1 juson juson  964 May 26 14:05 soapServerLib.c
-rw-r--r-- 1 juson juson 2.0M May 26 14:05 soapStub.h
-rw-r--r-- 1 juson juson 539K May 26 15:14 stdsoap2.c
-rw-r--r-- 1 juson juson 140K May 26 15:14 stdsoap2.h
-rw-r--r-- 1 juson juson 3.0K May 26 14:07 wsdd.h

框架搭建完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值