# 网关 Owl 模块检查报告 2026-06-03 > **基准文档**: `doc/对接文档/GoWVP接口文档.md` (3419行, ~40个API) > **检查范围**: `gateway/src/IntegrationGateway.Adapters.Owl/` (OwlAdapter.cs, OwlAuthHelper.cs) > **日期**: 2026-06-03 --- ## 1. 覆盖率概览 GoWVP 接口文档共 **40 个 REST 端点**,当前 OwlAdapter 覆盖了 **8 个**(20%)。 | 模块 | 文档端点数 | 已实现 | 缺失 | |------|:---:|:---:|:---:| | 控制台 | 1 | 0 | 1 | | 推流列表 | 4 | 0 | 4 | | 拉流代理 | 4 | 0 | 4 | | 国标设备 | 6 | 3 | 3 | | 国标通道 | 3 | 3 | 0 | | 通道管理 | 4 | 2 | 2 | | AI 检测 | 4 | 0 | 4 | | 事件 | 5 | 0 | 5 | | 区域管理 | 2 | 0 | 2 | | 配置管理 | 2 | 0 | 2 | | 流媒体 | 2 | 0 | 2 | | ONVIF | 3 | 0 | 3 | | **合计** | **40** | **8** | **32** | --- ## 2. 已实现接口对照 | GoWVP 端点 | OwlAdapter 方法 | 能力接口 | 状态 | |------|------|------|:--:| | GET /devices | GetDevicesAsync | IHasFlatDevices | ✅ | | PUT /devices/{id} | PushMetadataAsync | IAcceptsMetadataPush | ✅ | | POST /channels/{id}/play | GetLiveUrlAsync | IHasStreams | ✅ | | POST /channels/{id}/ptz | PtzControlAsync / PtzStopAsync | IHasStreams | ✅ | | POST /channels/{id}/snapshot | GetSnapshotAsync | IHasStreams | ✅ | | GET /recordings | GetRecordingsAsync | IHasRecordings | ✅ | | (未映射) | GetPlaybackUrlAsync | IHasStreams | ⚠️ 自拼URL | | GET /health | HealthCheckAsync | IGatewayAdapter | ✅ | --- ## 3. 缺失项详细清单 ### 3.1 控制台监控(1个) | 端点 | 用途 | 影响 | |------|------|------| | **GET /stats** | CPU/内存/磁盘/网络实时监控 | 管理端无法查看 Owl 服务器健康度 | **建议**: OwlAdapter 增加 `GetStatsAsync()`,返回 CPU/内存/磁盘 JSON,`Capabilities.HasStats = true`。 ### 3.2 推流管理(4个) | 端点 | 说明 | |------|------| | POST /stream_pushs | 添加推流通道 | | GET /stream_pushs | 分页查询推流列表 | | PUT /stream_pushs/{id} | 编辑推流 | | DELETE /stream_pushs/{id} | 删除推流 | **影响**: 管理端无法从 Vol.Pro 直接添加/管理 Owl 推流通道,需登录 Owl 控制台操作。 ### 3.3 拉流代理(4个) | 端点 | 说明 | |------|------| | POST /stream_proxys | 添加拉流代理 | | GET /stream_proxys | 分页查询拉流列表 | | PUT /stream_proxys | 编辑拉流代理 | | DELETE /stream_proxys/{id} | 删除拉流代理 | **影响**: 同推流,非 GB28181 的 RTSP/RTMP 通道无法通过管理端管理。 ### 3.4 国标设备扩展(3个) | 端点 | 说明 | 当前替代 | |------|------|------| | **GET /devices/channels** | 一键获取所有设备+通道列表 | 无 — 当前 GetDevicesAsync 只返回 NVR,不展开通道 | | POST /devices | 添加 GB28181 设备 | 无 | | POST /devices/{id}/catalog | 查询设备目录 | 无 | **关键缺失**: `GET /devices/channels` 直接返回设备+通道的联合结果,比单独调 `/devices` + `/channels` 高效。当前适配器在 `GetDevicesAsync` 中只映射了 NVR 设备(IsParent=true),**没有展开下级通道**。 ### 3.5 通道管理(2个) | 端点 | 说明 | |------|------| | **POST /channels** | 添加 RTMP/RTSP 通道 | | **DELETE /channels/{id}** | 删除通道 | | GET /channels | 通道列表(独立) | **半缺失**: `GET /channels` 和 `PUT /channels/{id}` 虽未直接调用,但流和 PTZ 接口已间接使用通道 ID。 ### 3.6 AI 检测能力(4个) | 端点 | 说明 | |------|------| | POST /channels/{id}/ai/enable | 启用 AI 检测 | | POST /channels/{id}/ai/disable | 禁用 AI 检测 | | POST /channels/{id}/zones | 添加 AI 检测区域 | | GET /channels/{id}/zones | 获取检测区域 | **影响**: Owl 的 AI 人数统计/区域入侵能力无法通过网关管理端开启/配置。 ### 3.7 AI 事件管理(5个) | 端点 | 说明 | |------|------| | GET /events | 分页查询 AI 事件(按通道/标签/时间筛选) | | GET /events/{id} | 事件详情 | | PUT /events/{id} | 更新事件 | | DELETE /events/{id} | 删除事件 | | GET /events/image/{path} | 获取事件快照图片 | **战略缺失**: Owl AI 事件(人员检测、车辆检测、入侵告警等)是**视频智能监控的核心数据**。当前网关零接入,意味着: - 规则引擎无法以"人数越限"为条件触发动作 - AI 事件不能同步到 Vol.Pro 告警表 - 事件快照无法在大屏展示 **建议**: 通过 `IHasAlarms` 接口暴露 AI 事件,映射 `StandardAlarm { AlarmId=event.id, Level=重要/普通, Title=label, Content=快照路径 }`。 ### 3.8 系统管理(4个) | 端点 | 说明 | |------|------| | GET /configs/info | 查询配置 | | PUT /configs/info/sip | 修改 SIP 配置 | | GET /media_servers | 流媒体列表 | | PUT /media_servers/{id} | 修改流媒体 | **影响**: 运维类接口,暂不阻塞业务。 ### 3.9 ONVIF(3个) | 端点 | 说明 | |------|------| | GET /onvif/devices-discover | ONVIF 设备发现 | | POST /onvif | 添加 ONVIF 设备 | | GET /onvif/discover | ONVIF 设备发现(SSE) | --- ## 4. 现有代码问题项 ### 4.1 设备列表只返回 NVR 不展开通道 `GetDevicesAsync` → `MapDevice` 将所有设备映射为 `IsParent=true, Category="硬盘录像机"`,不查询也不返回通道子设备。这导致: - Vol.Pro 设备树中 Owl 设备全是父设备,无摄像头子节点 - 前端预览按钮要求 `DeviceGroup='视频设备'` 的叶子设备,找不到子设备 `GET /devices/channels` 可一次性返回设备+通道,相比两次调用更高效。 ### 4.2 OwlDevice 模型字段不完整 当前 `OwlDevice` 只有 8 个字段(Id, Name, IsOnline, Protocol, Address, Port, Transport),GoWVP 返回的 Device 至少有 20+ 个字段,缺失包括: | 缺失字段 | 说明 | 用途 | |------|------|------| | Manufacturer | 厂商 | 设备详情显示 | | Model | 型号 | 设备详情显示 | | Firmware | 固件版本 | 运维 | | Longitude/Latitude | 经纬度 | 地图标记 | | ChannelCount | 通道数 | 统计 | | Status/RegisterWay | 注册方式 | GB28181 状态 | | CreatedAt/UpdatedAt | 时间戳 | 同步管理 | ### 4.3 HealthCheck 端点路径可能错误 代码调 `GET /health`,但 GoWVP 文档显示控制台唯一端点 `GET /stats`。需确认 Owl 实际实现。 ### 4.4 GetPlaybackUrlAsync 手工拼 URL 直接拼接 `/recordings/channels/{id}/index.m3u8?start_ms=&end_ms=&token=`,未调用 Owl API。虽然功能通常可用,但依赖内部路径约定,Owl 版本升级可能失效。 ### 4.5 无 PTZ 预设位/巡航支持 GoWVP PTZ 接口 `POST /channels/{id}/ptz/control` 支持 `action: preset/patrol/scan/stop`,当前仅实现 `continuous` 方向移动和 `stop`。 --- ## 5. 优先级建议 | 优先级 | 项目 | 说明 | |:---:|------|------| | 🔴 P0 | 设备列表展开通道 | 前端无法展示摄像头设备 | | 🔴 P0 | AI 事件接入 IHasAlarms | 规则引擎无法获知人数/入侵 | | 🟠 P1 | 使用 GET /devices/channels | 替代当前单独调 /devices | | 🟠 P1 | OwlDevice 字段补全 | 设备详情展示 | | 🟡 P2 | AI 检测启停 | 远程控制 Owl AI | | 🟡 P2 | 推流/拉流 CRUD | 管理端统一通道管理 | | ⚪ P3 | 预设位/巡航 PTZ | 高级云台功能 | | ⚪ P3 | 系统管理接口 | 运维便捷性 | | ⚪ P3 | ONVIF 设备发现 | 部署时的设备发现 |