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
相关推荐
言乐62 小时前
Python加速器4跨境网络加速器
运维·服务器·开发语言·网络·python
金金计较.2 小时前
Go语言-3
java·开发语言·golang
天山@1232 小时前
PHP代码审计实验记录
网络安全·php·php代码审计
张小凡vip3 小时前
python--爬虫--经验积累的遇到的坑
开发语言·爬虫·python
Wang's Blog3 小时前
Java框架快速入门: Spring Security+OAuth2之云服务集成与多因子认证设计
java·开发语言·spring
门思科技4 小时前
LoRaWAN 网络容量估算:一个 SX1302 网关到底能带多少设备
开发语言·网络·php
大草原的小灰灰4 小时前
Python基础语法
开发语言·python
泡泡鱼(敲代码中)5 小时前
MySQL基础学习笔记:从数据模型到DDL全掌握
开发语言·数据库·笔记·学习·mysql
潜创微科技7 小时前
IT6520:USB-C 转 MIPI 高集成控制器,DP 1.4a 转 MIPI 单芯片搞定 4K120 显示
c语言·开发语言·低延迟·掌机·联阳
Escalating_xu7 小时前
【System V 信号量】从 P/V 原语到 Builder 封装:写出可控、可清理的进程互斥组件
java·linux·开发语言·jvm