ONVIF 协议
Open Network Video Interface Forum
ONVIF(开放网络视频接口论坛) 是一个由 Sony、Axis、Bosch 于 2008 年共同创建的国际标准组织,目标是让不同厂商的网络视频产品 能够互通、互联、互操作。
主要功能模块
| 模块 | 功能说明 |
|---|---|
| Device Management | 设备管理:搜索设备、获取设备信息、时间、网络配置等 |
| Media | 媒体服务:获取视频流 URL、配置分辨率、码率、编码格式等 |
| PTZ (Pan-Tilt-Zoom) | 云台控制:控制摄像头旋转、变焦、预置点调用等 |
| Event | 事件通知:运动检测、报警输入、状态变更上报 |
| Imaging | 图像参数:亮度、对比度、曝光、白平衡等调整 |
| Analytics | 视频分析:如人脸检测、越界检测等智能事件 |
| Recording | 录像管理:控制录像、查询录像片段 |
| Replay | 回放控制:播放录像、跳转时间点 |
发展历史
| 时间 | 事件 |
|---|---|
| 2008 年 | ONVIF 成立,发布首版核心规范 |
| 2011 年 | Profile S 发布 —— 视频流互通标准化 |
| 2013-14 年 | Profile C、G 发布,功能扩展至访问控制与存储 |
| 2016-18 年 | Profile Q、A、T 发布,覆盖快速安装、高级视频等 |
| 2021 年 | 合规产品数突破 20 000 件,规格升级至元数据/智能分析 |
| 2023 年 | 15 周年,产品数超过 25 000 件 |
| 2025 年 | 发布视频签名、与 C2PA 合作迈入视频可信化时代 |
android_onvif
设备发现-发送广播
工作流程图
┌──────────────────────┐
│ ONVIF 客户端 APP │
└─────────┬────────────┘
│ 发送 Probe 请求 (UDP 3702)
▼
┌──────────────────────┐
│ 局域网所有设备 │
│ (ONVIF 摄像机 / NVR) │
└─────────┬────────────┘
│
匹配类型后返回 ProbeMatch
▼
┌──────────────────────┐
│ 客户端解析返回 XML │
│ 提取 XAddr 设备地址 │
└─────────┬────────────┘
│
通过 HTTP 调用 ONVIF 服务接口
probe.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
ONVIF WS-Discovery 设备发现请求报文(Probe Message)
这是客户端(例如 NVR 或手机 APP)主动在局域网内通过 UDP 3702 端口广播的探测请求。
支持 ONVIF 协议的摄像机或设备收到此报文后,会以 ProbeMatch 报文形式回复自己的信息。
-->
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope"
xmlns:tds="http://www.onvif.org/ver10/device/wsdl">
<!--
Envelope 是 SOAP 消息的最外层元素。
xmlns 指定命名空间:
- http://www.w3.org/2003/05/soap-envelope 表示 SOAP 1.2 协议。
- tds 命名空间用于标识 ONVIF 设备服务 (Device Service)。
-->
<Header>
<!-- SOAP 消息头部 -->
<wsa:MessageID xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
uuid:d9305f63-5027-4edb-b1f1-58c463b5419a
</wsa:MessageID>
<!--
每个请求唯一的消息 ID,用于标识一次 Probe 请求。
一般是随机生成的 UUID。
-->
<wsa:To xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
urn:schemas-xmlsoap-org:ws:2005:04:discovery
</wsa:To>
<!--
表示消息的目的地,这里固定为 WS-Discovery 的命名空间地址。
所有支持 WS-Discovery 的设备都监听此目标。
-->
<wsa:Action xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe
</wsa:Action>
<!--
表示当前 SOAP 消息的操作类型。
Probe 表示“设备发现探测请求”。
-->
</Header>
<Body>
<!-- SOAP 消息体,包含实际的探测请求内容 -->
<Probe xmlns="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--
WS-Discovery 定义的 Probe 元素。
客户端用它表示自己想要查找的设备类型或范围。
-->
<Types>tds:Device</Types>
<!--
指定要查找的设备类型。
tds:Device 表示 ONVIF 的 Device Service 设备。
(设备收到后会判断自己是否是这种类型的设备,然后返回匹配信息)
-->
<Scopes/>
<!--
可选字段,用于限定搜索范围。
如果为空,则表示不限定,所有 ONVIF 设备都会响应。
若填写内容,如 "onvif://www.onvif.org/type/NetworkVideoTransmitter",
则只会匹配符合该 Scope 的设备。
-->
</Probe>
</Body>
</Envelope>
设备解析
192.168.43.23 设备
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"
xmlns:wd="http://schemas.xmlsoap.org/ws/2005/04/discovery"
xmlns:wa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:dn="http://www.onvif.org/ver10/network/wsdl"
xmlns:tds="http://www.onvif.org/ver10/device/wsdl">
<SOAP-ENV:Body>
<wd:ProbeMatches>
<wd:ProbeMatch>
<wa:EndpointReference>
<wa:Address>urn:uuid:2419d68a-2dd2-21b2-a205-00886855007f</wa:Address>
</wa:EndpointReference>
<wd:Types>dn:NetworkVideoTransmitter tds:Device</wd:Types>
<wd:Scopes>
onvif://www.onvif.org/Profile/Streaming
onvif://www.onvif.org/Profile/T
onvif://www.onvif.org/type/Network_Video_Transmitter
onvif://www.onvif.org/hardware/IPC
onvif://www.onvif.org/name/
</wd:Scopes>
<wd:XAddrs>http://192.168.43.23:80/onvif/device_service</wd:XAddrs>
<wd:MetadataVersion>1</wd:MetadataVersion>
</wd:ProbeMatch>
</wd:ProbeMatches>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
主机与发现的设备通信
| 功能分类 | 请求文件 | 用途与解析说明 |
|---|---|---|
| 设备搜索 | probe.xml |
发送 ONVIF Probe 请求搜索局域网设备,使用 FindDevicesThread#getDeviceInfo 解析返回,提取设备 UUID、ServiceUrl、Manufacturer 等信息,封装到 Device 对象中。 |
| 设备信息 | getDeviceInformation.xml |
获取设备基本信息,使用 XmlDecodeUtil#getDeviceInformation 解析,填充 Device 对象的 FirmwareVersion、SerialNumber、Manufacturer、Model 字段。 |
| 系统时间 | getSystemDateAndTime.xml |
获取设备系统日期和时间,可解析返回设置本地时间或显示设备时间,不直接映射到 Device 对象,可扩展字段存储。 |
| 网络接口 | getNetworkInterface.xml |
获取设备网络接口信息,解析返回填充 Device.NetworkInterface 对象,包括 InterfaceToken、MTU、IPv4/IPv6、PrefixLength 等信息。 |
setNetworkInterface.xml |
修改设备网络接口配置,如 IP、掩码、网关等,不直接解析 Device,但用于发送 SOAP 请求修改设备参数。 | |
| 能力信息 | getCapabilities.xml |
获取设备支持的功能模块 URL,如 Media、PTZ、Events、Imaging 等,解析方法 XmlDecodeUtil#getCapabilitiesUrl 填充 Device 对象对应 URL 字段(MediaUrl、PtzUrl、EventUrl、ImageUrl、AnalyticsUrl)。 |
| 媒体 Profile | getProfiles.xml / getProfile.xml |
获取设备媒体 Profile 配置,包括视频和音频编码参数、视频源、音频源、PTZ 配置等,解析方法 XmlDecodeUtil#getMediaProfiles 填充 MediaProfile 对象,并存储在 Device 的 profiles 列表中。 |
| RTSP 流 | getStreamUri.xml |
获取媒体流 URI,用 XmlDecodeUtil#getStreamUri 解析,填充 Device 对象的 MediaUrl 或用于播放视频流。 |
| 抓图 URL | getSnapshotUri.xml |
获取设备抓图 URL,用 XmlDecodeUtil#getSnapshotUri 解析,可用于抓拍或截图操作,填充 Device 对象的截图 URL 字段。 |
| 图像设置 | getImagingSettings.xml |
获取摄像机图像设置,包括亮度、对比度、饱和度、曝光参数,解析方法 XmlDecodeUtil#getGetImageSetting 填充 Device.ImageSetting 对象,Exposure 子对象保存曝光模式、时间、最小/最大值等。 |
setImagingSettings.xml |
设置摄像机图像参数,通过 SOAP 请求修改 Device.ImageSetting 对应参数,不直接解析返回。 |
|
| 用户管理 | setUser.xml |
添加或修改设备用户信息,如用户名、密码、权限级别,发送 SOAP 请求更新,不直接解析返回到 Device。 |
| 系统操作 | systemReboot.xml |
发送设备重启请求,不解析返回,可根据返回状态判断操作是否成功。 |
| 固件升级 | startFirmwareUpgrade.xml |
启动设备固件升级,不解析返回,可根据返回状态更新 UI 或日志。 |
| 配置选项 | getConfigOptions.xml |
获取设备配置选项,如视频编码、分辨率范围等,解析方法可填充 Device 对象或 MediaProfile 可用选项,用于 UI 展示或配置检查。 |