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

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


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

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

目录

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

在这里插入图片描述

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

🎄一、概述

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有个大致的认识。


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

🎄二、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等技术去实现。


【Onvif从零实践】01、Onvif 详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、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.wsdlhttps://www.onvif.org/ver10/network/wsdl/remotediscovery.wsdlhttps://www.onvif.org/ver10/media/wsdl/media.wsdlhttps://www.onvif.org/ver20/ptz/wsdl/ptz.wsdl

WSDL文件结构介绍
1、WSDL 文件是一个 XML 文件,顶部必须用 声明。Onvif的WSDL网页是做了排版的,下载后才可以看到XML格式。

2、WSDL 文档的根元素definitions 元素,它会定义命名空间 (Namespaces),来避免 XML 标签冲突,以xmlns开头的就是命名空间的定义 。
【Onvif从零实践】01、Onvif 详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、WSDL、SOAP)

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

#mermaid-svg-g4g33rJRqbqkNnrH {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-g4g33rJRqbqkNnrH .error-icon{fill:#552222;}#mermaid-svg-g4g33rJRqbqkNnrH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-g4g33rJRqbqkNnrH .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-g4g33rJRqbqkNnrH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-g4g33rJRqbqkNnrH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-g4g33rJRqbqkNnrH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-g4g33rJRqbqkNnrH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-g4g33rJRqbqkNnrH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-g4g33rJRqbqkNnrH .marker.cross{stroke:#333333;}#mermaid-svg-g4g33rJRqbqkNnrH svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-g4g33rJRqbqkNnrH .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-g4g33rJRqbqkNnrH .cluster-label text{fill:#333;}#mermaid-svg-g4g33rJRqbqkNnrH .cluster-label span{color:#333;}#mermaid-svg-g4g33rJRqbqkNnrH .label text,#mermaid-svg-g4g33rJRqbqkNnrH span{fill:#333;color:#333;}#mermaid-svg-g4g33rJRqbqkNnrH .node rect,#mermaid-svg-g4g33rJRqbqkNnrH .node circle,#mermaid-svg-g4g33rJRqbqkNnrH .node ellipse,#mermaid-svg-g4g33rJRqbqkNnrH .node polygon,#mermaid-svg-g4g33rJRqbqkNnrH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-g4g33rJRqbqkNnrH .node .label{text-align:center;}#mermaid-svg-g4g33rJRqbqkNnrH .node.clickable{cursor:pointer;}#mermaid-svg-g4g33rJRqbqkNnrH .arrowheadPath{fill:#333333;}#mermaid-svg-g4g33rJRqbqkNnrH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-g4g33rJRqbqkNnrH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-g4g33rJRqbqkNnrH .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-g4g33rJRqbqkNnrH .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-g4g33rJRqbqkNnrH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-g4g33rJRqbqkNnrH .cluster text{fill:#333;}#mermaid-svg-g4g33rJRqbqkNnrH .cluster span{color:#333;}#mermaid-svg-g4g33rJRqbqkNnrH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-g4g33rJRqbqkNnrH :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} WSDL Types Message PortType Binding Service XML Schema
定义数据结构 输入/输出消息格式 操作集合
如GetDeviceInformation 协议绑定
如SOAP/HTTP 服务端点
URL地址

  • types元素:定义访问的类型,如请求的方法名,参数,以及返回值等。给每个element指定对应的type
    【Onvif从零实践】01、Onvif 详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、WSDL、SOAP)

  • message元素:SOAP 协议消息传递的参数,包含了请求和响应的消息。这里的element会与 type元素 中的对应。
    【Onvif从零实践】01、Onvif 详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、WSDL、SOAP)

  • portType元素:指明服务器的接口,并且通过 operation 绑定相应的 inputouput 消息。
    【Onvif从零实践】01、Onvif 详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、WSDL、SOAP)

  • binding元素:绑定定消息所使用的格式、协议。还需要留意soapAction的值。
    【Onvif从零实践】01、Onvif 详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、WSDL、SOAP)

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

理解WSDL的四个关键步骤

  • 1、定位服务入口:查找元素获取服务URL,如果没有service元素则跳过这一步。
  • 2、识别可用操作:在中查找operation列表
  • 3、解析请求/响应结构

#mermaid-svg-PpPD7lDNdxv0kphs {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PpPD7lDNdxv0kphs .error-icon{fill:#552222;}#mermaid-svg-PpPD7lDNdxv0kphs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PpPD7lDNdxv0kphs .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-PpPD7lDNdxv0kphs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PpPD7lDNdxv0kphs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PpPD7lDNdxv0kphs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PpPD7lDNdxv0kphs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PpPD7lDNdxv0kphs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PpPD7lDNdxv0kphs .marker.cross{stroke:#333333;}#mermaid-svg-PpPD7lDNdxv0kphs svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PpPD7lDNdxv0kphs .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-PpPD7lDNdxv0kphs .cluster-label text{fill:#333;}#mermaid-svg-PpPD7lDNdxv0kphs .cluster-label span{color:#333;}#mermaid-svg-PpPD7lDNdxv0kphs .label text,#mermaid-svg-PpPD7lDNdxv0kphs span{fill:#333;color:#333;}#mermaid-svg-PpPD7lDNdxv0kphs .node rect,#mermaid-svg-PpPD7lDNdxv0kphs .node circle,#mermaid-svg-PpPD7lDNdxv0kphs .node ellipse,#mermaid-svg-PpPD7lDNdxv0kphs .node polygon,#mermaid-svg-PpPD7lDNdxv0kphs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PpPD7lDNdxv0kphs .node .label{text-align:center;}#mermaid-svg-PpPD7lDNdxv0kphs .node.clickable{cursor:pointer;}#mermaid-svg-PpPD7lDNdxv0kphs .arrowheadPath{fill:#333333;}#mermaid-svg-PpPD7lDNdxv0kphs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PpPD7lDNdxv0kphs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PpPD7lDNdxv0kphs .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-PpPD7lDNdxv0kphs .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-PpPD7lDNdxv0kphs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PpPD7lDNdxv0kphs .cluster text{fill:#333;}#mermaid-svg-PpPD7lDNdxv0kphs .cluster span{color:#333;}#mermaid-svg-PpPD7lDNdxv0kphs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PpPD7lDNdxv0kphs :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;} 操作名称 输入消息 输出消息 查找对应message定义 查找对应message定义 查看part引用的数据类型 查看part引用的数据类型

  • 4、确定协议细节
    检查确认传输协议(HTTP/SOAP)
    注意soapAction值.

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

🎄四、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 元素只能出现一次。

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

🎄五、WSDLSOAP 的映射

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

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

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

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

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


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

🎄六、总结

👉本文介绍了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