Android 监控

网络共享

Posted by LXG on November 7, 2025

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

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 对象的 FirmwareVersionSerialNumberManufacturerModel 字段。
系统时间 getSystemDateAndTime.xml 获取设备系统日期和时间,可解析返回设置本地时间或显示设备时间,不直接映射到 Device 对象,可扩展字段存储。
网络接口 getNetworkInterface.xml 获取设备网络接口信息,解析返回填充 Device.NetworkInterface 对象,包括 InterfaceTokenMTUIPv4/IPv6PrefixLength 等信息。
  setNetworkInterface.xml 修改设备网络接口配置,如 IP、掩码、网关等,不直接解析 Device,但用于发送 SOAP 请求修改设备参数。
能力信息 getCapabilities.xml 获取设备支持的功能模块 URL,如 Media、PTZ、Events、Imaging 等,解析方法 XmlDecodeUtil#getCapabilitiesUrl 填充 Device 对象对应 URL 字段(MediaUrlPtzUrlEventUrlImageUrlAnalyticsUrl)。
媒体 Profile getProfiles.xml / getProfile.xml 获取设备媒体 Profile 配置,包括视频和音频编码参数、视频源、音频源、PTZ 配置等,解析方法 XmlDecodeUtil#getMediaProfiles 填充 MediaProfile 对象,并存储在 Deviceprofiles 列表中。
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 展示或配置检查。