2. ONVIF协议族核心概念

ONVIF(Open Network Video Interface Forum)并不是一个单一协议,而是一组基于Web Services的接口规范集合。它把网络视频设备的能力拆分成若干“服务集”(Service Set),每个服务集负责一类明确的交互职责。理解这些服务集的分工与调用顺序,是智慧矿山视频监控系统能够把不同厂商的摄像机、NVR、球机统一接入并实现联动的前提。本节围绕设备发现、设备管理、媒体配置、事件处理、PTZ控制五个核心服务集展开,说明它们各自解决什么问题、通过什么接口交互,以及在矿山场景中如何组合使用。

一、服务集的分层关系

ONVIF设备在逻辑上分为“设备层”和“媒体层”。设备层由Device Service(设备服务)统一对外,负责能力协商、网络配置、系统时间、用户与证书管理;设备发现则通过WS-Discovery完成,属于接入前的第一步。媒体层由Media Service(媒体服务)承载,负责视频源、编码器配置、流地址生成。事件与PTZ是建立在设备层之上的功能服务:Event Service负责订阅与推送报警事件,PTZ Service负责云台方向、变倍与预置位控制。它们之间的调用关系可以用下面的结构图表示。

ONVIF 核心服务集与调用关系 接入客户端 视频平台 / NVR / 集成网关 矿山综合监控平台 WS-Discovery 组播 239.255.255.250:3702 Probe / ProbeMatch / Hello Device Service GetCapabilities / GetServices GetDeviceInformation / 时间同步 Media Service(媒体1/媒体2) GetProfiles / GetVideoSources GetStreamUri(RTSP 地址) 编码参数:分辨率/帧率/码率 Event Service GetEventProperties(事件主题) CreatePullPointSubscription PullMessages(拉取通知) PTZ Service ContinuousMove / Stop AbsoluteMove / RelativeMove GotoPreset / SetPreset 联动 典型调用顺序(示例) ① WS-Discovery 发现设备 → ② GetCapabilities 确认支持的服务与版本 → ③ GetProfiles 取媒体配置 → ④ GetStreamUri 取 RTSP 地址并拉流 ⑤ GetEventProperties 获取事件主题 → ⑥ CreatePullPointSubscription 建立订阅 → ⑦ PullMessages 周期拉取报警 ⑧ 收到越界/移动事件后调用 GotoPreset 或 ContinuousMove 联动球机 → ⑨ Stop 停止转动,回到预置位 注:图中端口、地址与参数为教学示例,实际以设备能力文档与现场配置为准。

二、设备发现:接入的第一步

设备发现基于WS-Discovery协议,客户端向组播地址239.255.255.250的3702端口发送Probe消息,网段内支持ONVIF的设备以ProbeMatch单播回应,返回设备服务地址(形如http://192.168.10.64/onvif/device_service)与设备类型。设备上电或地址变化时还会主动发送Hello消息。矿山现场通常按采区、井口、皮带走廊划分VLAN,若发现不到设备,首先要确认客户端与摄像机是否在同一广播域、交换机是否放行组播、以及设备是否关闭了ONVIF开关。发现只是“知道有谁”,真正判断设备能力还要调用Device Service的GetCapabilities或GetServices,读取其支持的服务地址、版本与是否具备PTZ、事件能力。

三、媒体配置:把“能看”变成“看得对”

Media Service的核心对象是Profile(配置档)。一个Profile把视频源(VideoSource)、编码器配置(VideoEncoderConfiguration)、音频源、PTZ配置绑定在一起,形成一套可独立取流的参数组合。工程上常见的做法是设备预置主码流与子码流两个Profile:主码流用于录像与细节查看,子码流用于多画面预览与低带宽回传。以某型枪机为例,主码流可设为1920×1080、25fps、H.264、码率4096kbps、GOP 50;子码流设为704×576、15fps、码率512kbps。调用GetProfiles拿到ProfileToken后,再调用GetStreamUri并指定RTP-Unicast与RTSP传输方式,即可得到类似rtsp://192.168.10.64:554/Streaming/Channels/101的地址。若需要修改参数,则通过SetVideoEncoderConfiguration下发,注意修改后要重新获取流地址,部分设备会因配置重建而短暂断流。

四、事件处理:从“被动看”到“主动报”

Event Service采用订阅—通知模型。客户端先调用GetEventProperties获取设备支持的事件主题(Topic),例如移动侦测、视频遮挡、报警输入、越界侦测等,主题以树状命名,如tns1:RuleEngine/CellMotionDetector/Motion。随后通过CreatePullPointSubscription建立拉取式订阅,得到一个订阅地址,再周期性调用PullMessages拉取事件,消息中包含事件时间、主题、来源Token与状态(如IsMotion=true)。相比Base Notification的推送模式,PullPoint更适合矿山这种平台侧位于调度中心、与前端跨网段且需要统一收敛的场景。实际部署中要关注订阅有效期(TerminationTime),到期前需续订,否则事件会静默丢失。

五、PTZ控制:让球机“看得准”

PTZ Service提供连续移动、绝对位置、相对位置与预置位四类操作。ContinuousMove需要给定Pan/Tilt速度向量与变倍速度,取值范围通常为-1到1,调用后必须显式Stop,否则球机会持续转动;AbsoluteMove则直接给定Pan、Tilt、Zoom的目标归一化坐标,适合精确对准。矿山场景中更常用的是预置位:先用ContinuousMove把球机对准皮带机头、井口或煤仓卸料点,调用SetPreset保存为PresetToken(如Preset1对应“皮带机头”),联动时直接GotoPreset并指定速度。需要注意不同厂商对Pan/Tilt坐标系的定义可能不同,有的以图像中心为原点、有的以左上角为原点,接入时应先小幅度测试确认方向,避免“越联动越偏”。

六、服务集协同的工程要点

把上述服务集串起来,才能形成可用的联动闭环。一个典型的矿山示例是:平台通过WS-Discovery发现井口球机,GetCapabilities确认其支持Media、Event、PTZ;GetProfiles取子码流用于预览;订阅越界侦测事件;当PullMessages返回某防区越界时,平台调用GotoPreset转到对应预置位并切换主码流录像。工程上建议把设备能力(服务地址、Profile列表、事件主题、预置位表)在接入时一次性采集并缓存,避免每次联动都重复协商;同时对每个服务调用设置超时与重试,记录SOAP Fault返回的错误码,便于排障。下表给出接入阶段建议采集的关键信息,可作为设备台账的字段参考。

采集项 调用接口 用途
设备服务地址、厂商型号、固件版本 GetDeviceInformation 台账登记、兼容性判断
支持的服务及版本 GetCapabilities / GetServices 判断是否支持事件、PTZ
Profile列表与编码参数 GetProfiles 主/子码流选择
RTSP流地址 GetStreamUri 拉流与录像
事件主题清单 GetEventProperties 联动规则配置
预置位编号与名称 GetPresets 联动转向目标
接入调试时,可先用ONVIF Device Manager或开源的onvif-zeep工具逐项验证服务调用,确认GetStreamUri能取到流、PullMessages能收到事件、GotoPreset能正确转向,再把这些调用固化到平台侧,能显著减少联调时间。

总体来看,ONVIF的服务集划分让“发现—配置—取流—订阅—控制”形成了一条清晰的接入链路。掌握每个服务集的职责边界与调用约束,比记住某个具体接口更重要:设备发现解决“找得到”,媒体配置解决“看得清”,事件处理解决“报得准”,PTZ控制解决“跟得上”。四者协同,才构成智慧矿山视频监控可联动、可运维的接入基础。