WSDL 是什么
WSDL(Web Services Description Language) 是用 XML 写的 Web 服务接口说明书。
对 ONVIF 来说,它描述的不是画面怎么传,而是:SOAP 服务有哪些、能调什么方法、请求/响应 XML 长什么样、服务地址在哪。
| 部分 | 作用 | ONVIF 例子 |
|---|---|---|
types | 数据类型(XML Schema) |
|
message | 一次请求/响应由哪些元素组成 | GetProfiles 请求体 |
portType / operation | 有哪些操作 |
|
binding | 怎么传(SOAP over HTTP) | DeviceBinding、MediaBinding |
service / port | 服务实际 URL |
|
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 | 设备在说什么 |
|---|---|
| 我是网络视频发送端(摄像机) |
| 有视频编码 |
| 支持 Profile S 实时流 |
| 声明支持 Profile G(标签有,未必真做录像检索) |
| 带云台 |
| 支持成像调节 |
| 支持这些编码类型标签 |
| 位置信息 |
| 设备名称 |
-------------------------------------------------------------------------
NVR 用 HTTP POST 访问 XAddrs,调用 GetServices
NVR 请求内容
| 内容 | |
|---|---|
请求 |
|
响应 |
|
摄像机告诉 NVR 下一步该去哪:
| 服务 | XAddr |
|---|---|
Device |
|
Media |
|
Imaging |
|
PTZ |
|
Management |
|
连上 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请求:
| 内容 | |
|---|---|
请求 |
|
响应 |
|
每个 Profile 绑了视频源、编码器、可选音频/PTZ,这里的 Token(如Profile_0)是后面所有媒体/云台操作的“句柄”。
设备回应:
| Token | 名称 | 编码 | 分辨率 |
|---|---|---|---|
| MainStream | H264 | 1920×1080@60 |
| SubStream | H264 | 640×360@60 |
| 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)。