😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰发布时间⏰:
本文未经允许,不得转发!!!
目录
- 🎄一、概述
- 🎄二、ONVIF 的服务架构:NVT 与 NVC
- 🎄三、ONVIF 核心功能模块
- ✨3.1 Device Service(设备服务)
- ✨3.2 Media Service(媒体服务)
- ✨3.3 Event Service(事件服务)
- ✨3.4 PTZ Service(云台控制服务)
- ✨3.5 Imaging Service(图像服务)
- ✨3.6 Analytics Service(分析服务)
- 🎄四、ONVIF Profile(配置文件)
- ✨4.1 Profile 是什么
- ✨4.2 核心 Profile 详解
- Profile S —— 基础视频流
- Profile G —— 边缘存储与检索
- Profile T —— 高级视频流
- Profile M —— 元数据与分析事件
- Profile 对比总览
- ✨4.3 Profile 的组合使用
- 🎄五、总结
🎄一、概述
在上一篇文章中,我们从 Onvif 客户端开发的角度认识了 Web Services、WSDL、SOAP 等基础概念,了解到 ONVIF 基于 Web Services 架构,以 WSDL 定义服务接口,SOAP 协议传输控制信令,媒体流则通过 RTP/RTSP 传输。但上一篇文章主要停留在“协议如何工作”的层面,还没有深入回答两个关键问题:
- ONVIF 到底定义了哪些服务?每个服务能做什么?
- 什么是 ONVIF Profile?不同 Profile 之间有什么区别?
这两个问题对于实际开发至关重要。第一个问题决定了“我能调用哪些接口”,第二个问题决定了“设备支持哪些功能”。本文将从 Onvif 客户端开发的角度,系统介绍 ONVIF 的核心功能模块与 Profile 规范。
🎄二、ONVIF 的服务架构:NVT 与 NVC
在深入各个服务之前,需要先明确 ONVIF 系统中的两个核心角色:
- NVT(Network Video Transmitter,网络视频发送器):即 ONVIF 设备端,如 IP 摄像机、视频编码器等,它是服务提供者。
- NVC(Network Video Client,网络视频客户端):即 ONVIF 客户端,如视频管理软件(VMS)、NVR 等,它是服务请求者。
典型的网络视频系统中,NVT 作为服务提供者,对外暴露一系列标准化的 Web Services 接口;NVC 作为服务请求者,通过 SOAP 协议调用这些接口来控制设备、获取视频流。
ONVIF 规范将所有服务划分为不同的类别,每个类别有独立的 WSDL 定义和命名空间。Device Service 是所有其他服务的入口点,其地址固定在http://onvif_host/onvif/device_service,客户端通过 Device Service 获取设备支持的其他服务地址。
🎄三、ONVIF 核心功能模块
ONVIF 定义的服务模块主要包括以下几类。其中Device、Media、Event 三个服务是 NVT 必须提供的,其余为可选扩展。
✨3.1 Device Service(设备服务)
功能定位:设备服务是 ONVIF 的核心入口服务,用于控制设备并获取设备所支持的服务信息。
主要能力:
- 设备信息获取:
GetDeviceInformation获取制造商、型号、固件版本、序列号等基本信息 - 能力集获取:
GetCapabilities查询设备支持哪些服务及对应的服务地址 - 服务列表:
GetServices获取所有可用服务的详细信息 - 网络配置:配置 IP 地址、DNS、网关等网络参数
- 系统管理:系统时间设置、固件升级、重启等操作
- 用户管理:创建、删除用户,设置用户权限
- 安全配置:HTTPS 配置、访问策略等
开发提示:客户端开发的第一步通常是调用GetCapabilities,从响应中解析出 Media、PTZ、Event 等服务的 XAddr(服务地址),后续调用这些服务时需要将请求发送到对应的地址。
对应 WSDL:devicemgmt.wsdl
✨3.2 Media Service(媒体服务)
功能定位:媒体服务用于配置视频、音频和元数据的实时流传输。
主要能力:
- 获取配置文件:
GetProfiles获取设备的所有媒体配置文件(Media Profile) - 获取流地址:
GetStreamUri根据指定的 Profile Token 和传输协议(RTSP/HTTP)获取流媒体地址 - 视频源配置:
GetVideoSources获取视频源信息(分辨率、帧率等) - 编码器配置:
GetVideoEncoderConfigurations获取视频编码参数(H.264/H.265、码率、GOP 等) - 音频配置:配置音频编码格式、采样率等
- 多播配置:设置多播地址和端口
- OSD 配置:设置字符叠加信息(时间戳、设备名称等)
开发提示:获取视频流是 ONVIF 客户端开发最核心的需求之一。典型流程为:GetProfiles→ 选择 Profile →GetStreamUri→ 获得 RTSP 地址 → 交给播放器播放。每个 Media Profile 将一个视频/音频源映射到一个视频/音频编码器,并关联 PTZ 和分析配置。
对应 WSDL:media.wsdl(v1.x)或 media2.wsdl(v2.x,Profile T 使用)
✨3.3 Event Service(事件服务)
功能定位:事件服务为客户端提供事件通知服务,用于订阅和接收设备端产生的事件。
主要能力:
- 事件属性查询:
GetEventProperties获取设备支持的事件类型和主题 - 创建订阅:
CreatePullPointSubscription创建拉取点订阅 - 拉取事件:
PullMessages从订阅中拉取事件消息 - 事件通知:支持 WS-BaseNotification 标准,可通过 Basic Notification 或 Pull Point 两种模式接收事件
典型事件类型:
- 移动侦测(Motion Detection)
- 遮挡/篡改报警(Tampering)
- 数字输入触发(Digital Input)
- 视频丢失(Video Loss)
- 分析事件(Analytics Events,如越界检测、区域入侵等)
开发提示:ONVIF 事件机制支持两种模式。Pull Point 模式由客户端主动拉取,实现相对简单;Basic Notification 模式需要客户端提供通知接收端点(Notification Consumer),设备会主动推送事件。对于大多数客户端开发场景,推荐先实现 Pull Point 模式。
对应 WSDL:event.wsdl
✨3.4 PTZ Service(云台控制服务)
功能定位:PTZ 服务用于控制 NVT 的云台转动和变焦。
主要能力:
- 持续移动:
ContinuousMove控制云台按指定速度持续转动 - 绝对定位:
AbsoluteMove将云台移动到指定的绝对位置 - 相对定位:
RelativeMove以当前位置为基准移动指定偏移量 - 停止:
Stop停止当前 PTZ 运动 - 预置位:
SetPreset/GotoPreset/GetPresets/RemovePreset管理预置位 - 状态查询:
GetStatus获取当前 PTZ 位置和运动状态
开发提示:PTZ 控制的核心概念是PTZ Node和PTZ Configuration。PTZ Node 代表物理 PTZ 设备的能力(支持哪些运动、速度范围等),PTZ Configuration 代表具体的控制配置。开发时需要先通过GetConfigurations获取 PTZ 配置的 Token,再执行具体的控制操作。
对应 WSDL:ptz.wsdl
✨3.5 Imaging Service(图像服务)
功能定位:图像服务用于处理 NVT 的图像配置。
主要能力:
- 图像参数获取/设置:亮度、对比度、饱和度、锐度、色调
- 曝光控制:自动/手动曝光模式、曝光时间、增益
- 白平衡:自动/手动白平衡模式
- 聚焦控制:自动/手动聚焦,聚焦位置移动
- 宽动态范围(WDR):开/关及强度调节
开发提示:图像服务的接口分为 v1(ver10)和 v2(ver20)两个版本。v2 版本增加了更多高级功能,如聚焦控制、WDR 等。Profile T 要求支持 Imaging v2。
对应 WSDL:imaging.wsdl
✨3.6 Analytics Service(分析服务)
功能定位:分析服务用于控制 NVT 的视频分析功能。
主要能力:
- 分析模块查询:获取设备支持的视频分析模块及其参数
- 分析配置:配置分析规则(区域、灵敏度、触发条件等)
- 分析事件:与 Event Service 配合,接收分析结果事件
开发提示:Analytics Service 的接口相对复杂,实际开发中通常只需要通过 Event Service 接收分析事件即可,不需要直接调用 Analytics Service。
对应 WSDL:analytics.wsdl
🎄四、ONVIF Profile(配置文件)
✨4.1 Profile 是什么
ONVIF Profile 是一组经过认证的、固定的功能集合。设备声明支持某个 Profile,就意味着它实现了该 Profile 规定的所有功能。Profile 的核心理念是确保互操作性——不同厂商的设备和客户端只要支持同一个 Profile,就能保证基本的互通。
ONVIF Profile 的命名方式也很有讲究。每个 Profile 用一个字母表示,代表功能领域,例如S代表Streaming(流媒体),G代表Georage/storaGe(存储),M代表Metadata(元数据)。当某个领域需要功能升级时,会分配下一个字母,而不是修改已有的 Profile——现有 Profile 永远不会被修改,这是为了保证向后兼容性。
✨4.2 核心 Profile 详解
Profile S —— 基础视频流
Profile S 是 ONVIF 最早发布、也是应用最广泛的 Profile。
核心功能:
- IP 摄像机/编码器通过网络向客户端发送视频数据
- 客户端(VMS/NVR)可以配置、请求和控制视频流
- 支持 PTZ 控制、音频流、中继输出、移动侦测事件
- 基于 Media Service v1(
ver10/media/wsdl)
适用场景:基础的 IP 视频监控系统。
⚠️ 注意:ONVIF 已宣布停止对 Profile S 的支持,鼓励使用 Profile T,因为目前绝大多数设备已支持 Profile T。
Profile G —— 边缘存储与检索
Profile G 专为 IP 视频系统中的存储、搜索、检索和回放而设计。
核心功能:
- 支持在设备端(如 IP 摄像机内置 SD 卡)或客户端进行录像存储
- 支持按时间范围、事件类型搜索录像
- 支持录像回放和下载
- 将视频应用从“流传输”扩展到“录制与存储”
适用场景:需要边缘存储或 NVR 回放功能的系统。
对应 WSDL:recording.wsdl、replay.wsdl、search.wsdl
Profile T —— 高级视频流
Profile T 是 Profile S 的后继者,代表了 ONVIF 在现代视频监控领域的最新能力。
核心功能:
- 视频编码:同时支持H.264 和 H.265(HEVC)两种编码格式,H.265 可实现更高效的压缩率,降低存储需求和带宽使用
- Media2 Service:使用全新的 Media2 服务替代 Media v1,提供更丰富的配置能力
- 增强图像控制:标准化控制聚焦、曝光、宽动态范围(WDR)等
- 事件支持:内置移动报警和篡改事件支持
- 双向音频:支持摄像头的音频输入和输出,实现双向语音通信
- 增强安全:条件支持 HTTPS 流传输
适用场景:现代高清视频监控系统,特别是需要 H.265、双向音频、高级图像控制的场景。
对应 WSDL:media2.wsdl、imaging.wsdl(v20)
Profile M —— 元数据与分析事件
Profile M 于 2021 年发布,专门针对视频分析应用的元数据和事件传输进行标准化。
核心功能:
- 标准化分析元数据的传输格式(如对象边界框、分类标签等)
- 支持分析事件的订阅和通知
- 扩展元数据和事件处理到门禁、云服务、IoT 平台等系统
- 支持基于元数据的智能分析应用(如人脸识别、越界检测、车牌识别)
适用场景:AI 视频分析平台、智能安防系统。
Profile 对比总览
| Profile | 名称含义 | 核心功能 | 对应 WSDL | 适用场景 |
|---|---|---|---|---|
| S | Streaming | 基础视频流、PTZ、音频、移动侦测 | media.wsdl (v1) | 基础 IP 监控 |
| G | storaGe | 边缘存储、搜索、回放、录像 | recording/replay/search.wsdl | 录像回放系统 |
| T | Advanced sTreaming | H.264/H.265、Media2、双向音频、增强安全 | media2.wsdl | 现代高清监控 |
| M | Metadata | 分析元数据、对象边界框、智能事件 | analytics.wsdl | AI 视频分析 |
| C | DoorControl | 门禁控制、事件管理 | accesscontrol.wsdl | 门禁系统 |
| A | Access control | 凭证管理、时间表、访问规则 | accesscontrol.wsdl | 高级门禁 |
| D | access controlDevices | 读卡器、生物识别、传感器等外围设备 | — | 门禁外围设备 |
✨4.3 Profile 的组合使用
不同 Profile 可以组合使用。例如,一个典型的视频监控系统可以使用Profile S/T 处理视频流+Profile G 处理录像回放+Profile M 处理分析元数据,构成一个完整的解决方案。
对于客户端开发,你需要根据目标设备实际支持的 Profile 来设计功能。例如,如果设备只支持 Profile S,那么你无法通过 ONVIF 获取 H.265 编码配置;如果设备支持 Profile T,你可以通过 Media2 Service 获取更丰富的媒体配置信息。
🎄五、总结
本文从 Onvif 客户端开发的角度,系统介绍了 ONVIF 的核心功能模块和 Profile 规范。
核心功能模块方面,ONVIF 定义了 Device、Media、Event、PTZ、Imaging、Analytics 等标准化服务。其中 Device Service 是入口,Media Service 用于获取视频流,Event Service 用于接收设备事件,PTZ Service 用于云台控制。每个服务都有对应的 WSDL 文件,在客户端开发中需要通过 gSOAP 工具解析 WSDL 并生成 C/C++ 调用代码。
Profile 方面,Profile 是 ONVIF 确保设备互通性的核心机制。Profile S 是基础视频流,Profile T 是 Profile S 的现代替代者,支持 H.265、Media2 等高级特性;Profile G 处理录像存储与回放;Profile M 面向 AI 分析场景。不同 Profile 可以组合使用,开发时需要根据设备实际支持的 Profile 来设计功能。
对客户端开发的实际影响:
- 调用
GetCapabilities时,响应中会包含设备支持的 Profile 信息,可用于判断设备能力 - 如果设备支持 Profile T,应优先使用 Media2 Service(
ver20/media/wsdl)而非 Media v1 - 获取视频流时,
GetStreamUri返回的 RTSP 地址可直接交给 FFmpeg/VLC 等播放器使用
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
完成本文阅读后,你应该能够:
- 列出 ONVIF 的 5 个以上核心服务模块及其用途
- 说出 Device Service、Media Service、Event Service 各自的核心能力
- 理解 NVT 和 NVC 的角色区别
- 说出
GetCapabilities、GetProfiles、GetStreamUri的调用顺序和作用- 说出 Profile S、G、T、M 各自的核心功能区别
- 理解为什么 ONVIF 使用字母命名 Profile,以及为什么现有 Profile 不会被修改
- 知道 Profile T 支持 H.265,以及它使用了 Media2 Service
- 能够根据设备支持的 Profile 判断设备的能力范围
参考资源:
- ONVIF 官网 Profiles 总览:https://www.onvif.org/profiles/
- ONVIF 官方博客 Profile 系列文章:https://www.onvif.org/blog/
- ONVIF 核心规范(Core Specification):http://developer.onvif.org/