☰
ONVIF是怎么通讯的?
2026/10/11 1:47:35 网站建设 项目流程

WSDL 是什么

WSDL(Web Services Description Language) 是用 XML 写的 Web 服务接口说明书。
对 ONVIF 来说,它描述的不是画面怎么传,而是:SOAP 服务有哪些、能调什么方法、请求/响应 XML 长什么样、服务地址在哪。

部分作用ONVIF 例子

types

数据类型(XML Schema)

tt:Profile、ProfileToken

message

一次请求/响应由哪些元素组成

GetProfiles 请求体

portType / operation

有哪些操作

GetProfiles、GetStreamUri

binding

怎么传(SOAP over HTTP)

DeviceBinding、MediaBinding

service / port

服务实际 URL

http://IP:2000/onvif/media_service

NVR 或工具只要认这份合同,就知道该往哪个 URL 发哪种 SOAP,回包该怎么解析。

和 Profile/S 的关系:
Profile/S:能力档标签——我会实时流这套能力
WSDL: 接口合同——这套能力具体用哪些操作、消息格式是什么,没有 WSDL(或等价的内置 ONVIF 客户端知识),NVR 不知道该怎么拼 GetStreamUri 的 XML。

--------------------------------------------------------------------

NVR 在局域网发组播 Probe(UDP 239.255.255.250:3702),问有没有 NetworkVideoTransmitter。

1.客户端发送的Probe组播消息

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</a:Action><a:MessageID>uuid:a32ffbbf-6529-4faa-a73d-2bf2be1879b6</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">urn:schemas-xmlsoap-org:ws:2005:04:discovery</a:To></s:Header><s:Body><Probe xmlns="http://schemas.xmlsoap.org/ws/2005/04/discovery"><d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dp0="http://www.onvif.org/ver10/network/wsdl">dp0:NetworkVideoTransmitter</d:Types></Probe></s:Body></s:Envelope><s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</a:Action><a:MessageID>uuid:a32ffbbf-6529-4faa-a73d-2bf2be1879b6</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">urn:schemas-xmlsoap-org:ws:2005:04:discovery</a:To></s:Header><s:Body><Probe xmlns="http://schemas.xmlsoap.org/ws/2005/04/discovery"><d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dp0="http://www.onvif.org/ver10/network/wsdl">dp0:NetworkVideoTransmitter</d:Types></Probe></s:Body></s:Envelope><s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/04/discovery/Probe</a:Action><a:MessageID>uuid:a32ffbbf-6529-4faa-a73d-2bf2be1879b6</a:MessageID><a:ReplyTo><a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address></a:ReplyTo><a:To s:mustUnderstand="1">urn:schemas-xmlsoap-org:ws:2005:04:discovery</a:To></s:Header><s:Body><Probe xmlns="http://schemas.xmlsoap.org/ws/2005/04/discovery"><d:Types xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dp0="http://www.onvif.org/ver10/network/wsdl">dp0:NetworkVideoTransmitter</d:Types></Probe></s:Body></s:Envelope>

服务器回应客户端的ProbeMatches响应消息

<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dn="http://www.onvif.org/ver10/network/wsdl"><soap:Header><wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches</wsa:Action><wsa:MessageID>uuid:0259a12f-6e7f-4e89-928c-1ef1bec63f47</wsa:MessageID><wsa:RelatesTo>uuid:0ca8b312-1a2e-41fe-8d8f-0e55ff9c2baf</wsa:RelatesTo><wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To><wsd:AppSequence InstanceId="1791449214" MessageNumber="6"/></soap:Header><soap:Body><wsd:ProbeMatches><wsd:ProbeMatch><wsa:EndpointReference><wsa:Address>urn:uuid:2082ce0c-6e2c-58ce-92dd-4ef1d59a0c40</wsa:Address></wsa:EndpointReference><wsd:Types>dn:NetworkVideoTransmitter</wsd:Types><wsd:Scopes>onvif://www.onvif.org/type/NetworkVideoTransmitter onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/Profile/S onvif://www.onvif.org/Profile/G onvif://www.onvif.org/hardware/PTZCamera onvif://www.onvif.org/location/country/China onvif://www.onvif.org/location/city/Guangzhou onvif://www.onvif.org/name/BroadcasterProFiber onvif://www.onvif.org/type/ptz onvif://www.onvif.org/type/H264 onvif://www.onvif.org/type/H265 onvif://www.onvif.org/type/MJPEG onvif://www.onvif.org/feature/ptz onvif://www.onvif.org/feature/imaging </wsd:Scopes><wsd:XAddrs>http://192.168.6.159:2000/onvif/device_service</wsd:XAddrs><wsd:MetadataVersion>1</wsd:MetadataVersion></wsd:ProbeMatch></wsd:ProbeMatches></soap:Body></soap:Envelope><?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dn="http://www.onvif.org/ver10/network/wsdl"><soap:Header><wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches</wsa:Action><wsa:MessageID>uuid:fce70a7a-3703-40af-a01f-6574b36c0abc</wsa:MessageID><wsa:RelatesTo>uuid:0ca8b312-1a2e-41fe-8d8f-0e55ff9c2baf</wsa:RelatesTo><wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To><wsd:AppSequence InstanceId="1791449214" MessageNumber="7"/></soap:Header><soap:Body><wsd:ProbeMatches><wsd:ProbeMatch><wsa:EndpointReference><wsa:Address>urn:uuid:2082ce0c-6e2c-58ce-92dd-4ef1d59a0c40</wsa:Address></wsa:EndpointReference><wsd:Types>dn:NetworkVideoTransmitter</wsd:Types><wsd:Scopes>onvif://www.onvif.org/type/NetworkVideoTransmitter onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/Profile/S onvif://www.onvif.org/Profile/G onvif://www.onvif.org/hardware/PTZCamera onvif://www.onvif.org/location/country/China onvif://www.onvif.org/location/city/Guangzhou onvif://www.onvif.org/name/BroadcasterProFiber onvif://www.onvif.org/type/ptz onvif://www.onvif.org/type/H264 onvif://www.onvif.org/type/H265 onvif://www.onvif.org/type/MJPEG onvif://www.onvif.org/feature/ptz onvif://www.onvif.org/feature/imaging </wsd:Scopes><wsd:XAddrs>http://192.168.6.159:2000/onvif/device_service</wsd:XAddrs><wsd:MetadataVersion>1</wsd:MetadataVersion></wsd:ProbeMatch></wsd:ProbeMatches></soap:Body></soap:Envelope><?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsd="http://schemas.xmlsoap.org/ws/2005/04/discovery" xmlns:dn="http://www.onvif.org/ver10/network/wsdl"><soap:Header><wsa:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/ProbeMatches</wsa:Action><wsa:MessageID>uuid:bb7bef8e-b054-442d-9274-b3293590e4fe</wsa:MessageID><wsa:RelatesTo>uuid:0ca8b312-1a2e-41fe-8d8f-0e55ff9c2baf</wsa:RelatesTo><wsa:To>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:To><wsd:AppSequence InstanceId="1791449214" MessageNumber="9"/></soap:Header><soap:Body><wsd:ProbeMatches><wsd:ProbeMatch><wsa:EndpointReference><wsa:Address>urn:uuid:2082ce0c-6e2c-58ce-92dd-4ef1d59a0c40</wsa:Address></wsa:EndpointReference><wsd:Types>dn:NetworkVideoTransmitter</wsd:Types><wsd:Scopes>onvif://www.onvif.org/type/NetworkVideoTransmitter onvif://www.onvif.org/type/video_encoder onvif://www.onvif.org/Profile/Streaming onvif://www.onvif.org/Profile/S onvif://www.onvif.org/Profile/G onvif://www.onvif.org/hardware/PTZCamera onvif://www.onvif.org/location/country/China onvif://www.onvif.org/location/city/Guangzhou onvif://www.onvif.org/name/BroadcasterProFiber onvif://www.onvif.org/type/ptz onvif://www.onvif.org/type/H264 onvif://www.onvif.org/type/H265 onvif://www.onvif.org/type/MJPEG onvif://www.onvif.org/feature/ptz onvif://www.onvif.org/feature/imaging </wsd:Scopes><wsd:XAddrs>http://192.168.6.159:2000/onvif/device_service</wsd:XAddrs><wsd:MetadataVersion>1</wsd:MetadataVersion></wsd:ProbeMatch></wsd:ProbeMatches></soap:Body></soap:Envelope>

设备回 ProbeMatches,关键信息是:
Scopes:如 Profile/S、ptz、设备名等
XAddrs:http://IP:2000/onvif/device_service(Device 入口)
EndpointReference:设备 UUID,用来区分是哪一台。
到这一步 NVR 只是“看见你了”,能搜到,还没登录、也没有画面。

--------------------------------------------------------------------

2.NVR 拿到后的下一步,才会去http://192.168.6.77:2000/onvif/device_service调 GetServices / GetScopes

NVR/工具向192.168.6.77:2000的 Device 服务发一个 GetScopes 请求(<GetScopes xmlns="http://www.onvif.org/ver10/device/wsdl"/>);真正参数在后面的 SOAP Body 里(GetScopes+ 用户名密码那一段)。

action="http://www.onvif.org/ver10/device/wsdl/GetScopes是服务器对NVR的响应

服务器返回了完整的 Scopes 标签列表,真正有用的信息就在ScopeItem条目里。换句话说,GetScopes 返回的“信息列表”,其实就是一串ScopeItem要点:

Scope设备在说什么

type/NetworkVideoTransmitter

我是网络视频发送端(摄像机)

type/video_encoder

有视频编码

Profile/S、Profile/Streaming

支持 Profile S 实时流

Profile/G

声明支持 Profile G(标签有,未必真做录像检索)

hardware/PTZCamera、type/ptz、feature/ptz

带云台

feature/imaging

支持成像调节

type/H264/H265/MJPEG

支持这些编码类型标签

location/country/China、city/Guangzhou

位置信息

name/BroadcasterProFiber

设备名称

-------------------------------------------------------------------------

NVR 用 HTTP POST 访问 XAddrs,调用 GetServices

NVR 请求内容

内容

请求

POST /onvif/device_service→ Body 里GetServices(admin认证)

响应

200 OK+GetServicesResponse,列出各服务的 Namespace + XAddr

摄像机告诉 NVR 下一步该去哪:

服务XAddr

Device

.../onvif/device_service

Media

.../onvif/media_service← 接下来拿 Profile / 流地址

Imaging

.../onvif/imaging_service

PTZ

.../onvif/ptz_service(另有/onvif/PTZ兼容路径)

Management

http://192.168.6.77:80

连上 Device 相当于对device_service发这类 POST;这份具体是其中的 GetServices(要服务地址)。后面预览会再 POST 到media_service。

----------------------------------------------------------------------

3.拿媒体配置(Media Profile)
NVR 改 POST 到 media_service,调:GetProfiles:拿到 Profile_0 / Profile_1 …(主码流/子码流)回包里每个 Profile 带一堆 token。

Profile ├─ token = "Profile_0" ← 主码流名片 ├─ Name = "MainStream" ├─ VideoSourceConfiguration │ token = "VideoSourceConfig_0" │ SourceToken = "VideoSource_0" ├─ VideoEncoderConfiguration │ token = "VideoEncoderConfig_0" ← 对应编码通道 0 ├─ AudioSourceConfiguration │ token = "AudioSourceConfig_0" ├─ AudioEncoderConfiguration │ token = "AudioEncoderConfig_0" └─ PTZConfiguration token = "PTZConfig_0" NodeToken = "PTZNode_0"

NVR 添加设备时最关心的是 Profile token(Profile_0、Profile_1…),后面拉流、改码率、转云台都拿它当密钥。

NVR请求:

内容

请求

POST /onvif/media_service,Body 里GetProfiles

响应

GetProfilesResponse,三套固定 Profile

每个 Profile 绑了视频源、编码器、可选音频/PTZ,这里的 Token(如Profile_0)是后面所有媒体/云台操作的“句柄”。

设备回应:

Token名称编码分辨率

Profile_0

MainStream

H264

1920×1080@60

Profile_1

SubStream

H264

640×360@60

Profile_2

ThirdStream

JPEG

1920×1080@60

三路共用同一 VideoSource_0(传感器 3840×2160)、同一音频和 PTZConfig_0,fixed="true"。
下一步NVR会带某个Token(常是 Profile_0)调GetStreamUri,换RTSP地址再拉流

--------------------------------------------------------------------

4.要播放地址

NVR 带上ProfileToken调 GetStreamUri(Profile_0) → rtsp://IP:554/live/av0

GetStreamUri ProfileToken = "Profile_0" StreamSetup = RTP/RTSP 等

ONVIF 配置阶段结束:NVR 已经“连上并配好”,手里有RTSP URL,可以出图

--------------------------------------------------------------------

5.云台控制
预览起来后,NVR 还可:
PTZ:ContinuousMove/Stop/预置位 → ptz_service
成像/对焦:SetImagingSettings、Move → imaging_service
这些仍 POST 到 2000 端口对应路径,Header 里继续带用户认证,Body里常带同一个 ProfileToken。

--------------------------------------------------------------------

三个实际用途

1. 给客户端对接用(运行时合同)
NVR / ODM 等软件按 WSDL(或内置同一套规范)发:

POST /onvif/media_service
SOAP Action: .../GetStreamUri
Body: ProfileToken = Profile_0

设备按同一合同解析、回包。
双方不交换源码,只共同遵守同一份 WSDL 定义的消息格式。

--------------------------------------------------------------------

Profile S应用于网络视频系统,内容包括:
1、视频和音频流
2、PTZ控制和继电器输出
3、视频配置和多播
Profile S应用于网络视频系统。Profile S的设备(例如:网络摄像机或视频编码器)可以将视频数据通过IP网络发送到Profile S的客户端。Profile S的客户端(例如:视频管理软件)可以配置、请求和控制从Profile S的设备上的IP网络视频流。

Profile G应用于边缘存储与检索,内容包括:
1、配置、请求、控制录像
2、接收视频/音频流
Profile G应用于网络视频系统。Profile G设备(例如:网络摄像机或视频编码器)可以通过网络存储或本地存储录像。Profile G客户端(例如:视频管理软件)可以配置、请求和控制Profile G设备上的录像。

Profile T适用于高级视频流
H.264 / H.265视频压缩
成像设置
运动警报和篡改事件
元数据流
双向音频
Profile T专为基于IP的视频系统而设计。 Profile T支持视频流功能,例如使用H.264和H.265编码格式,成像设置以及诸如运动和篡改检测之类的警报事件。设备的强制功能还包括屏幕显示和元数据流,而客户端的强制功能还包括PTZ控制。 Profile T还涵盖了用于HTTPS流,PTZ配置,运动区配置,数字输入和继电器输出的ONVIF规范,以及支持此类功能的符合设备和客户端的双向音频。

Profile M用于元数据的分析配置和信息查询
用于元数据配置和流式传输
通用对象分类支持
用于地理位置、车辆、车牌、人脸和人体的元数据定义
用于对象计数、人脸和车牌识别分析,以及通过MQTT以JSON格式发送ONVIF事件的事件处理接口


事件规则配置
ONVIF Profile M支持元数据的分析配置和信息查询,以及元数据的过滤和流式传输。它具有用于通用对象分类的接口以及用于指定元数据(如地理位置,车辆,车牌,人脸和人体等)的接口。如果合规产品本身可支持对媒体配置文件管理、视频流、在元数据流中添加图像、事件处理或规则配置等功能,则它们也同样可支持用于这些事件的Profile M接口。如果合规产品支持对象统计(比如说,人或是车辆)、车牌识别或面部识别的分析功能,以及物联网系统使用的MQTT(消息队列遥测传输)协议, Profile M事件处理接口也同样可以用于这些功能。 Profile M的合规产品可以是边缘设备(如IP摄像机或基于视频的无人机)或是可以使用Profile M接口通过IP网络向客户端发送元数据的服务(包括用于设备的基于边缘的分析应用)。Profile M的合规客户端可以是视频管理软件(VMS)程序、网络视频录像机(NVR)或服务器或基于云的服务,合规设备需要能够使用Profile M接口来配置、请求和控制来自Profile M边界设备或服务的IP网络上的元数据流。支持MQTT的Profile M设备或客户端也可以与物联网平台/应用进行通信,从而完成与物联网设备和应用的通信。

Profile C用于门控和事件管理
站点信息和配置
事件和报警管理
门禁控制
Profile C适用于电子门禁系统中使用的产品。Profile C符合设备和客户端支持站点信息,门禁控制以及事件和报警管理。

Profile A用于门禁控制配置
授予/撤消凭证
创建时间表
分配访问规则
Profile A适用于电子门禁系统中使用的产品。Profile A符合设备的设备可以检索信息,状态和事件,以及配置访问规则,凭证和时间表等实体。Profile A符合要求的客户端可以提供访问规则,凭证和时间表的配置。客户端还可以检索和接 收标准化的门禁访问控制相关事件

Profile D用于访问控制外设
传输凭证标识和访问请求
执行锁定/解锁等操作
Profile D适用于外围设备的输入界面,例如令牌读取器(用于读取卡,钥匙,移动电话或条形码),生物识别读取器(用于指纹识别),相机(用于虹膜,面部或车牌识别),按键,传感器(用于识别锁状态,门状态,温度或动作)和部分输出设备(例如锁,显示器和LED)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询