【从零实践Onvif】01、Onvif详细介绍(从Onvif客户端开发的角度认识Onvif、Web Servies、WSDL、SOAP)
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:
本文未经允许,不得转发!!!
目录
- 🎄一、概述
- 🎄二、Web Services :设备交互的框架基础
- 🎄三、WSDL :服务的“说明书”
- 🎄四、SOAP :消息传输的载体
- 🎄五、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有个大致的认识。
🎄二、Web Services :设备交互的框架基础
Web Services
是Onvif
的设备功能抽象层,将设备能力(如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.wsdl
、media.wsdl
、remotediscovery.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。
-
types
元素:定义访问的类型,如请求的方法名,参数,以及返回值等。给每个element
指定对应的type
。
-
message
元素:SOAP 协议消息传递的参数,包含了请求和响应的消息。这里的element
会与type
元素 中的对应。
-
portType
元素:指明服务器的接口,并且通过operation
绑定相应的input
、ouput
消息。
-
binding
元素:绑定定消息所使用的格式、协议。还需要留意soapAction
的值。
-
service
元素:指定服务所发布的名称
理解WSDL的四个关键步骤
- 1、定位服务入口:查找
<wsdl:service>
元素获取服务URL,如果没有service
元素则跳过这一步。 - 2、识别可用操作:在
<wsdl:portType>
中查找operation
列表 - 3、解析请求/响应结构
- 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 元素只能出现一次。
🎄五、WSDL 和 SOAP 的映射
在构建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