前言
一、ONVIF协议是什么
ONVIF(Open Network Video Interface Forum,开放式网络视频接口论坛)是一种全球性的开放行业标准,由安讯士(AXIS)、博世(BOSCH)和索尼(SONY)于2008年共同发起,旨在解决不同品牌网络视频设备(如摄像头、录像设备等)的互通性问题。通过定义统一的接口和通信规范,ONVIF协议实现了设备发现、实时视频流传输、设备控制等功能,成为安防监控领域的主流标准。
核心作用与优势:
- 互通性:打破厂商壁垒,支持跨品牌设备集成。
- 灵活性:用户可自由选择设备,构建定制化监控方案。
- 成本优化:降低系统集成复杂度,减少专有系统依赖。
- 技术创新:通过开放性标准推动行业技术迭代。
二、ONVIF规范的实现机制
ONVIF协议基于Web Service架构,通过WSDL(Web服务描述语言)定义服务接口。什么?WSDL是什么?这都不知道,不会百度啊。
采用SOAP(简单对象访问协议)实现设备间通信。
WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。
SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。或者更简单地说:SOAP 是用于访问网络服务的协议。
其实现机制可分为以下关键模块:
Web Service与SOAP
ONVIF将设备功能抽象为Web服务,客户端通过HTTP发送SOAP请求调用服务。例如,获取设备信息的SOAP请求示例如下:<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Body> <tds:GetDeviceInformation/> </soap:Body> </soap:Envelope>
SOAP消息由Envelope、Header、Body和Fault四部分组成,基于XML格式,支持跨平台通信。
WSDL描述文档
WSDL是ONVIF的“接口说明书”,以XML格式详细描述服务的位置、操作、参数及数据类型。例如,ONVIF的DeviceService
接口通过WSDL定义设备管理操作(如GetServices
)及其输入输出消息结构。设备发现与交互流程
ONVIF使用WS-Discovery协议实现设备自动发现。典型交互流程包括:- 设备上线后发送
HELLO
消息; - 客户端通过
PROBE
消息搜索设备; - 通过SOAP请求获取设备能力集和配置信息;
- 基于RTSP协议拉取实时视频流。
- 设备上线后发送
工作方式
简单来讲,ONVIF协议将终端设备(摄像头等)提供Web Service服务,将每一个功能看做一个Web Service。
首先获取摄像头的主地址比如(http://10.0.0.47/onvif/device_service),我的摄像头的IP为10.0.0.47,获得这个地址后,我们就可以向这个地址提供的接口来获取相应的功能,每个接口可以认为一个功能,也就是一个Web Service
三、WSDL文档的核心组成
WSDL文件定义了ONVIF服务的交互规则,主要包含以下部分:
- Types:定义数据类型(如分辨率、编码格式),通过XML Schema导入。
- Message:描述请求与响应的数据结构(如
GetServicesRequest
和GetServicesResponse
)。 - Operation:服务支持的操作(如获取视频流URL的
GetStreamUri
)。 - Binding & Service:指定服务绑定方式(如HTTP传输)和访问地址。
示例:ONVIF设备服务的WSDL片段:
<definitions xmlns:tns="http://www.onvif.org/ver10/device/wsdl">
<types>
<xsd:import schemaLocation="onvif.xsd"/>
</types>
<message name="GetServicesRequest"/>
<portType name="Device">
<operation name="GetServices"/>
</portType>
<binding name="DeviceBinding" type="tns:Device">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
</binding>
<service name="DeviceService">
<port binding="tns:DeviceBinding">
<soap:address location="http://camera-ip/onvif/device_service"/>
</port>
</service>
</definitions>
四、构建SOAP消息的实践
构建SOAP消息需严格遵循WSDL定义的参数类型和命名空间。以设置H.265视频编码为例,Python代码示例如下:
import requests
from requests.auth import HTTPDigestAuth
soap_message = """
<ns2:SetVideoEncoderConfiguration xmlns:ns2="http://www.onvif.org/ver10/media/wsdl">
<ProfileToken>MediaProfile2</ProfileToken>
<Configuration>
<Name>H.265 Encoder</Name>
<Encoding>H265</Encoding>
<Resolution><Width>1920</Width><Height>1080</Height></Resolution>
</Configuration>
</ns2:SetVideoEncoderConfiguration>
"""
response = requests.post(
url="http://192.168.1.100/onvif/Media",
auth=HTTPDigestAuth("admin", "password"),
data=soap_message,
headers={'Content-Type': 'application/soap+xml'}
)
print(response.content)
此示例通过zeep
库解析WSDL生成客户端,并发送SOAP请求修改编码配置。
五、ONVIF的核心功能
- 设备管理:获取设备信息(型号、固件版本)、配置网络参数。
- 媒体控制:设置视频编码(如H.264/H.265)、分辨率、帧率。
- PTZ控制:远程操控云台(转动、变焦)。
- 事件处理:订阅运动检测、报警触发等实时事件。
- 视频分析:支持目标检测、行为分析等智能功能。
应用场景:
- 车载监控:360°全景环视系统通过ONVIF实现多摄像头统一管理,支持实时视频传输与盲区预警。
- 智能安防:集成门禁、报警设备,构建多模块联动的安防平台。
六、总结
ONVIF协议通过标准化接口和开放的Web Service架构,解决了网络视频设备的碎片化问题。其核心在于WSDL定义的统一接口和SOAP实现的跨平台通信。开发者可借助工具(如gSOAP
)快速生成代码,而终端用户则受益于灵活的集成方案与成本优化。随着物联网和智能安防的发展,ONVIF将持续推动行业生态的协同创新。
参考资料:
- [ONVIF协议介绍 - 阿里云开发者社区]
- [ONVIF规范的实现机制 - CuPlayer]
- [ONVIF WSDL详解 - CSDN]