ONVIF协议操作摄像头方法

embedded/2024/11/24 1:44:37/

一.前言
    简单介绍一下涉及到的名称。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。
   

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依赖的头文件路径,不指定可能会报错。
   

 ./soapcpp2 -x -L -C -I../gsoap-2.8/gsoap/import:../gsoap-2.8/gsoap onvif.h


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

.
├── 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


http://www.ppmy.cn/embedded/139995.html

相关文章

Java与Kotlin在鸿蒙中的地位

在当今移动操作系统领域,华为推出的鸿蒙系统(HarmonyOS)正逐渐崭露头角,成为与Android、iOS并驾齐驱的操作系统之一。对于开发者而言,了解如何为鸿蒙系统开发高质量的应用程序变得至关重要。在这篇文章中,我…

Kafka-Controller角色需要做什么?

一、上下文 《Kafka-Controller选举》博客中分析了Controller是如何选举出来的,且比如会执行onControllerFailover()。接下来让我们看看Controller角色都承担了哪些职责。 二、注册监听器 在从zookeeper读取资源前,注册监听器以获取 broker/topic 的回…

雷达图像用dB使图像细节更好

数字例子:雷达图像转换为dB尺度的影响 假设我们有一个雷达图像,其Sigma0值的线性表示如下: 像素A的Sigma0值为0.2(较暗)像素B的Sigma0值为1.0(中等亮度)像素C的Sigma0值为5.0(较亮…

Nginx通过url获取代理地址,动态代理

目的 底层服务返回的ws地址代理成wss的, 但是我们不知道底层服务返回的地址ip port所以 通过拼接的方式来通过url信息中获取到ws地址信息,进行动态代理 nginx.conf server {listen 11081 ssl;server_name localhost11081;rewrite ^/old-url$ /new-url permanent;add_…

如何在WPF中嵌入其它程序

在WPF中嵌入其它程序&#xff0c;这里提供两种方案 一、使用WindowsFormHost 使用步骤如下 1、添加WindowsFormsIntegration和System.Windows.Forms引用 2、在界面上放置WindowsFormHost和System.Windows.Forms.Panel 1 <Grid> 2 <WindowsFormsHost> 3…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(三)

本篇紧跟第一篇&#xff0c; 和 第二篇无关 Oracle - 多区间按权重取值逻辑 &#xff0c;分时区-多层级-取配置方案 Oracle - 多区间按权重取值逻辑 &#xff0c;分时区-多层级-取配置方案(二) 先说需求&#xff1a; 某业务配置表&#xff0c;按配置的时间区间及组织层级取方…

Ubuntu上安装MySQL并且实现远程登录

目录 下载网络工具 查看网络连接 更新系统软件包&#xff1b; 安装mysql数据库 查看mysql数据库状态 以数字ip形式显示mysql的监听状态。&#xff08;默认监听端口是3306&#xff09; 查看安装mysql数据库时系统创建的目录信息。 根据查询到的系统用户名以及随机密码&a…

超高流量多级缓存架构设计!

文章内容已经收录在《面试进阶之路》&#xff0c;从原理出发&#xff0c;直击面试难点&#xff0c;实现更高维度的降维打击&#xff01; 文章目录 电商-多级缓存架构设计多级缓存架构介绍多级缓存请求流程负载均衡算法的选择轮询负载均衡一致性哈希负载均衡算法选择 应用层 Ngi…