ONVIF协议操作摄像头方法

一.前言

简单介绍一下涉及到的名称。SOAP是一种基于XML的RPC协议规范,gSOAP是一个开发SOAP和XML应用(它们组成了webservice)的工具。ONVIF协议就是在SOAP协议规范的基础之上定义的一套用于网络摄像机的标准协议。

二.gsoap工具

gsoap包含wsdl2h和soapcpp2两个工具和一些拓展功能源码。wsdl2h顾名思义,通过下载onvif协议规范wsdl文件来产生c代码头文件。soapcpp2是通过头文件生成合适的代码。工具下载地址:https://sourceforge.net/projects/gsoap2/files/latest/download

三.生成代码

1.生成onvif头文件 -c 表示生成c代码,-s 表示不生成STL代码(使用系统标准库), -t 指定typemap.dat文件(数据类型定义) 这里面一个URL可以认为是摄像头的一个Profile。比如云台就需要用到ptz.wsdl,多播搜索设备用到remotediscovery.wsdl。

bash 复制代码
wsdl2h -o onvif.h -c -s -t ./typemap.dat \
http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl \
http://www.onvif.org/onvif/ver10/event/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 \
 http://www.onvif.org/onvif/ver10/schema/onvif.xsd \
 http://www.onvif.org/ver10/actionengine.wsdl

2.生成框架代码和业务代码。 -C 仅生成客户端代码 -S 仅生成服务端代码(这里用不上) -x 不生成xml文件 -L 不生成lib文件 -I 指定onvif.h依赖的头文件路径,不指定可能会报错。

bash 复制代码
 ./soapcpp2 -x -L -C -I../gsoap-2.8/gsoap/import:../gsoap-2.8/gsoap onvif.h

四.开发和整合代码

上面生成的代码用起来还是比较麻烦,可以先封装一下接口提供给上层应用调用。最后把自己封装好的代码和生成的代码提取出来,这里还会用到一些gsoap插件也要加进去(位于gsoap工具包的plugin目录),如果需要ssl支持还需要把ssl库加进来,把这些文件放一起就可以生成库文件。

bash 复制代码
.
├── build.sh
├── CMakeLists.txt
├── config
│   └── RTSP_CAP.cfg
├── include
│   ├── httpda.h
│   ├── mecevp.h
│   ├── onvif.h
│   ├── openssl
│   │   ├── aes.h
│   │   ├── asn1.h
│   │   ├── asn1_mac.h
│   │   ├── asn1t.h
│   │   ├── bio.h
│   │   ├── blowfish.h
│   │   ├── bn.h
│   │   ├── buffer.h
│   │   ├── camellia.h
│   │   ├── cast.h
│   │   ├── cmac.h
│   │   ├── cms.h
│   │   ├── comp.h
│   │   ├── conf_api.h
│   │   ├── conf.h
│   │   ├── crypto.h
│   │   ├── des.h
│   │   ├── des_old.h
│   │   ├── dh.h
│   │   ├── dsa.h
│   │   ├── dso.h
│   │   ├── dtls1.h
│   │   ├── ebcdic.h
│   │   ├── ecdh.h
│   │   ├── ecdsa.h
│   │   ├── ec.h
│   │   ├── engine.h
│   │   ├── e_os2.h
│   │   ├── err.h
│   │   ├── evp.h
│   │   ├── hmac.h
│   │   ├── idea.h
│   │   ├── krb5_asn.h
│   │   ├── kssl.h
│   │   ├── lhash.h
│   │   ├── md4.h
│   │   ├── md5.h
│   │   ├── mdc2.h
│   │   ├── modes.h
│   │   ├── objects.h
│   │   ├── obj_mac.h
│   │   ├── ocsp.h
│   │   ├── opensslconf.h
│   │   ├── opensslv.h
│   │   ├── ossl_typ.h
│   │   ├── pem2.h
│   │   ├── pem.h
│   │   ├── pkcs12.h
│   │   ├── pkcs7.h
│   │   ├── pqueue.h
│   │   ├── rand.h
│   │   ├── rc2.h
│   │   ├── rc4.h
│   │   ├── ripemd.h
│   │   ├── rsa.h
│   │   ├── safestack.h
│   │   ├── seed.h
│   │   ├── sha.h
│   │   ├── srp.h
│   │   ├── srtp.h
│   │   ├── ssl23.h
│   │   ├── ssl2.h
│   │   ├── ssl3.h
│   │   ├── ssl.h
│   │   ├── stack.h
│   │   ├── symhacks.h
│   │   ├── tls1.h
│   │   ├── ts.h
│   │   ├── txt_db.h
│   │   ├── ui_compat.h
│   │   ├── ui.h
│   │   ├── whrlpool.h
│   │   ├── x509.h
│   │   ├── x509v3.h
│   │   └── x509_vfy.h
│   ├── plc_driver.h
│   ├── plcdrv.h
│   ├── PTZBinding.nsmap
│   ├── smdevp.h
│   ├── soapH.h
│   ├── soapStub.h
│   ├── stdsoap2.h
│   ├── struct_timeval.h
│   ├── threads.h
│   ├── wsaapi.h
│   └── wsseapi.h
├── lib
│   ├── libcrypto.a
│   ├── libcrypto.so
│   ├── libcrypto.so.1.0.0
│   ├── libssl.a
│   ├── libssl.so
│   └── libssl.so.1.0.0
└── src
    ├── dom.c
    ├── httpda.c
    ├── mecevp.c
    ├── plc_driver.c
    ├── plcdrv.c
    ├── ptzctrl.c
    ├── smdevp.c
    ├── soapC.c
    ├── soapClient.c
    ├── stdsoap2.c
    ├── struct_timeval.c
    ├── threads.c
    ├── wsaapi.c
    └── wsseapi.c
相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端