当前位置: 首页 > web >正文

【从零实践Onvif】01、Onvif详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、WSDL、SOAP)

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:

本文未经允许,不得转发!!!

目录

  • 🎄一、概述
  • 🎄二、Web Services :设备交互的框架基础
  • 🎄三、WSDL :服务的“说明书”
  • 🎄四、SOAP :消息传输的载体
  • 🎄五、WSDLSOAP 的映射
  • 🎄六、总结


在这里插入图片描述

在这里插入图片描述

🎄一、概述

ONVIF(Open Network Video Interface Forum,开放型网络视频接口论坛)由安讯士(AXIS)、博世(BOSCH)和索尼(SONY)公司三方于2008年5月联合创立,旨在解决安防设备跨厂商兼容性问题。其核心目标是通过标准化接口实现网络视频产品的互通性,涵盖摄像机、录像机、门禁系统等设备。当前已有全球500多家企业会员和超10,000种认证产品,包括海康威视、大华等主流厂商579。

2008年11月,论坛正式发布了ONVIF第一版规范。

2010年11月,论坛发布了ONVIF第二版规范。规范涉及设备发现、实时音视频、摄像头PTZ控制、录像控制、视频分析等方面。

Onvif官网:https://www.onvif.org/
Onvif中文官网:https://www.onvif.org/ch/

技术架构定位

ONVIF基于Web Services架构,以WSDL定义服务接口,SOAP协议传输控制信令,媒体流则通过RTP/RTSP传输。这种分离设计兼顾了控制指令的可靠性和流媒体的实时性 。

下面将从Onvif客户端C/C++语言开发的角度介绍Onvif的一些相关名词:Web Services、WSDL、SOAP等,对Onvif有个大致的认识。


在这里插入图片描述

🎄二、Web Services :设备交互的框架基础

在这里插入图片描述

Web ServicesOnvif的设备功能抽象层,将设备能力(如PTZ控制、事件订阅)封装为网络可调用服务。每个Onvif设备都是一个服务端,提供标准化的API端点(Endpoint),客户端通过SOAP协议调用这些API实现设备控制。

WebService(Web服务)是一种跨语言、跨平台的远程调用技术。

  • 跨语言:服务器与客户端可以使用不同的语言开发,客户端都能调用服务器开放的接口,服务器只需要写一遍,任意语言的客户端都能进行调用。
  • 跨平台:服务端程序和客户端程序可以运行在不同的操作系统上。
  • 远程调用(Remote Procedure Call,简称RPC):指计算机 A(客户端) 上的程序可以调用计算机 B(服务器) 上的对象的方法。如云服务的人脸识别,你只需要传参数和人脸图片给到云,它就会帮你把结果返回给你。

从Onvif客户端开发的角度,我们只需要知道Web Services是一个Onvif使用的服务框架,它需要结合 http、xml、WSDL、SOAP等技术去实现。


在这里插入图片描述

🎄三、WSDL :服务的“说明书”

WSDL(Web Services Description Languag,Web 服务描述语言) 是XML格式的接口定义文件,精确描述服务功能、参数及数据类型。ONVIF将不同功能模块(如设备管理、媒体流控制、设备搜索)拆分为多个WSDL文件(如devicemgmt.wsdlmedia.wsdlremotediscovery.wsdl)。

Onvif 的WSDL下载地址:https://www.onvif.org/ch/profiles/specifications/,比较常用的有下面几个,可以打开对应网址,右键下载对应的WSDL:

https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl
https://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdl
https://www.onvif.org/ver10/media/wsdl/media.wsdl
https://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl

WSDL文件结构介绍
1、WSDL 文件是一个 XML 文件,顶部必须用 <?xml version="1.0" encoding="UTF-8"?> 声明。Onvif的WSDL网页是做了排版的,下载后才可以看到XML格式。

2、WSDL 文档的根元素是 definitions 元素,它会定义命名空间 (Namespaces),来避免 XML 标签冲突,以xmlns开头的就是命名空间的定义 。
在这里插入图片描述

3、关键元素(types, message, portType, binding, service)介绍
一个WSDL文件一般由下面5个元素组成:types, message, portType, binding, service。而Onvif 的WSDL一般会省略掉service元素,可能是因为Onvif设备的IP不会固定的,没法提供确定的URL。

WSDL
Types
Message
PortType
Binding
Service
XML Schema
定义数据结构
输入/输出消息格式
操作集合
如GetDeviceInformation
协议绑定
如SOAP/HTTP
服务端点
URL地址
  • types元素:定义访问的类型,如请求的方法名,参数,以及返回值等。给每个element指定对应的type
    在这里插入图片描述

  • message元素:SOAP 协议消息传递的参数,包含了请求和响应的消息。这里的element会与 type元素 中的对应。
    在这里插入图片描述

  • portType元素:指明服务器的接口,并且通过 operation 绑定相应的 inputouput 消息。
    在这里插入图片描述

  • binding元素:绑定定消息所使用的格式、协议。还需要留意soapAction的值。
    在这里插入图片描述

  • service元素:指定服务所发布的名称

理解WSDL的四个关键步骤

  • 1、定位服务入口:查找<wsdl:service>元素获取服务URL,如果没有service元素则跳过这一步。
  • 2、识别可用操作:在<wsdl:portType>中查找operation列表
  • 3、解析请求/响应结构
操作名称
输入消息
输出消息
查找对应message定义
查找对应message定义
查看part引用的数据类型
查看part引用的数据类型
  • 4、确定协议细节
    检查<wsdl:binding>确认传输协议(HTTP/SOAP)
    注意soapAction值.

在这里插入图片描述

🎄四、SOAP :消息传输的载体

SOAP (Simple Object Access Protocol,简单对象访问协议) 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。 或者更简单地说:SOAP 是用于访问网络服务的协议。 这个链接是SOAP教程:SOAP 教程 。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Header/><soap:Body><!-- 数据内容 --></soap:Body>
</soap:Envelope>

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

  • 必需的 Envelope 元素,是 SOAP 消息的根元素,可把此 XML 文档标识为一条 SOAP 消息。请注意 xmlns:soap 命名空间的值应当始终是:http://www.w3.org/2001/12/soap-envelope
  • 可选的 Header 元素,可包含有关 SOAP 消息的应用程序专用信息(比如认证(WS-Security)、支付等)。如果 Header 元素被提供,则它必须是 Envelope 元素的第一个子元素;
  • 必需的 Body 元素,可包含打算传送到消息最终端点的实际 SOAP 消息(所有的调用和响应信息)。
  • 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息。如果已提供了 Fault 元素,则它必须是 Body 元素的子元素。在一条 SOAP 消息中,Fault 元素只能出现一次。

在这里插入图片描述

🎄五、WSDLSOAP 的映射

在构建SOAP的过程中,必须从WSDL文件中获取并映射为SOAP消息。

将 WSDL 信息映射到 SOAP/XML 的具体位置:

WSDL 元素XML 中的位置示例值/说明
命名空间 (xmlns:dn)根元素 <soap:Envelope> 的属性xmlns:dn="http://schemas.xmlsoap.org/ws/2005/04/discovery"
SOAP Action<wsa:Action> 头部元素http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe
消息体结构 (dn:Probe)<soap:Body> 的子元素包含 <dn:Types><dn:Scopes> 等参数
设备类型参数<dn:Probe><dn:Types>dn:NetworkVideoTransmitter(摄像机设备)
端点地址UDP 目标地址(非 XML 内)IP: 239.255.255.250, Port: 3702(多播地址)
消息 ID<wsa:MessageID>(唯一标识)uuid:0eafa6d0-0c2a-11ef-9b8a-0800200c9a66(需动态生成 UUID)

WSDL是说明书,SOAP是具体发送的消息,上面表格只是一个简单的举例。然而这样一个对应过程将是充满了重复性和机械性的,为了避免不必要的人工差错以及节约开发时间,一个名为gSOAP的编译工具应运而生。

gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。通过将WSDL文件解析序列化为C/C++文件,最小化了Web Service的开发过程。


在这里插入图片描述

🎄六、总结

👉本文介绍了Onvif客户端开发的角度介绍了 Onvif 协议,并且介绍一些需要了解的名词 Web Servies、WSDL、SOAP、gSOAP 等。

在这里插入图片描述
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁

参考:
ONVIF协议 简介:https://blog.csdn.net/weierqiuba/article/details/70768505
WebService 理论详解:https://blog.csdn.net/wangmx1993328/article/details/86646656

http://www.xdnf.cn/news/16764.html

相关文章:

  • SpringCloud -- MQ高级
  • 数学建模——01规划/整数规划
  • Vue3 Composition API
  • Oracle迁移PostgreSQL隐式类型转换配置指南
  • RHCA - CL260 | Day03:配置 RHCS 集群
  • PyTorch 生态四件套:从图片、视频到文本、语音的“开箱即用”实践笔记
  • Git LFS 安装和使用
  • 动态规划Day5学习心得
  • 原生C++实现信号与槽机制:原理详解
  • windows环境下MySQL 8.0 修改或重置密码
  • SpringBoot 实现 RAS+AES 自动接口解密
  • 图像处理控件Aspose.Imaging教程:使用 C# 编程将 CMX 转换为 PNG
  • 基于 Rust 和土木工程、设备故障诊断、混凝土养护、GPS追踪、供应链物流跟踪系统、地下水监测等领域的实例
  • Y型M12一分二连接器:高效稳定的数据传输解决方案
  • 涿州周边水系分布三维地图
  • MyBatis Plus Wrapper 详细分析与原理
  • 代码随想录day50图论1
  • [leetcode] 反转字符串中的单词
  • Cockpit管理服务器
  • 在 CentOS 系统上安装 Docker
  • 《超级秘密文件夹》密码遗忘?试用版/正式版找回教程(附界面操作步骤)
  • NAT技术与代理服务
  • web服务器nginx
  • sqLite 数据库 (3):以编程方式使用 sqLite,4 个函数,以及 sqLite 移植,合并编译
  • USB电源原理图学习笔记
  • 相亲小程序聊天与互动系统模块搭建
  • 基于定制开发开源AI智能名片S2B2C商城小程序的B站私域流量引流策略研究
  • 线性回归原理与进阶
  • Three.js实现银河螺旋星云粒子特效——原理、实现
  • 在 Cloudflare 平台上完整部署 GitHub 项目 MoonTV 实现免费追剧流程