[SEN] 实现 ONVIF 发现、手工添加与 RTSP Profile 验证 #24

Closed
opened 2026-08-12 09:54:04 +08:00 by ila · 3 comments
Owner

当前状态:已完成

用户于 2026-08-14 明确验收通过。

基本信息

  • 类型:需求
  • 任务类型:单项目
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#8
  • 阶段:阶段 1(三条独立纵切)

依赖与并行

  • 前置工单:#23
  • 是否允许与前置工单并行:否
  • 原因:接入结果必须关联已建立的 Sense Device,并复用其凭据安全和审计边界。

子项目影响

  • 仅影响的子项目 / 交付单元:Sense
  • 是否跨子项目:否
  • 是否修改共享接口或契约:否;唯一事实来源:Sense 项目内部模型、端口和夹具
  • write_paths:
    • Sense/server/app/sense/adapters/onvif/
    • Sense/server/app/sense/adapters/rtsp/
    • Sense/server/app/sense/admission/
    • Sense/ui/src/api/sense/admission/
    • Sense/ui/src/views/sense/admission/
    • Sense/ui/src/router/modules/sense-admission.js
    • Sense/tests/admission/
    • Sense/testdata/onvif/
  • 各子项目需要执行的验证:仅 Sense 执行本工单“验证方式”;Brain、Bell 无需启动或验证

协同接口

  • 生产者:不适用
  • 消费者:不适用
  • 契约/共享事实源:不适用;跨端数据只预留 Sense 内部适配器端口,不在本工单冻结共享结构
  • 兼容策略:不适用
  • 被阻塞或需要适配的工单:不适用
  • 集成顺序:不适用

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-12
  • 关键原话或脱敏摘要:先创建三个项目全部独立 MVP 工单,标题带项目英文简称;独立任务不依赖其他项目在线,按 MVP 和真实依赖推进。

要解决什么

需要让实施人员在 Sense 内发现或手工添加实验室摄像头,读取 ONVIF Profiles/StreamUri 并验证主辅 RTSP 码流,同时明确认证失败、校时、重新探测和凭据更新结果。

做什么 / 不做什么

  • 做:
    • 实现受控 ONVIF 发现与手工地址接入,关联 Sense Device。
    • 读取 Profiles、分辨率/编码与 StreamUri,标识主/子码流并执行可超时的 RTSP 验证。
    • 处理认证失败、不可达、时间漂移、重新探测和凭据更新后的重试。
    • 提供不含真实地址/凭据的 ONVIF/RTSP 夹具测试,并单独记录真机验证。
  • 不做:
    • 不启动或配置 MediaMTX,不实现浏览器播放和区域配置。
    • 不把摄像头密码放入 URL、日志、工单、夹具或响应。
    • 不实现 GB/T 28181、厂商私有 SDK 或 16 路批量开通。

已确认方案

  • 把 ONVIF、RTSP 和准入编排隔离为可替换内部适配器,超时/重试有边界。
  • Stream URI 在持久化和响应前剥离/隔离凭据,前端只显示脱敏端点和验证状态。
  • Profile 形成 Sense 内部版本化快照,能力变化供后续区域重新校准提示使用。
  • 使用项目内模拟服务/录制响应测试,实验室真机结果独立标注。

预计修改文件:

  • Sense/server/app/sense/adapters/onvif/
  • Sense/server/app/sense/adapters/rtsp/
  • Sense/server/app/sense/admission/
  • Sense/ui/src/api/sense/admission/
  • Sense/ui/src/views/sense/admission/
  • Sense/ui/src/router/modules/sense-admission.js
  • Sense/tests/admission/
  • Sense/testdata/onvif/

需求变化记录

日期 变化内容 原因 用户确认
2026-08-12 将 Sense 首个纵切按骨架、认证、设备、接入、媒体、监看、区域拆为独立单元工单 支持三个项目并行并按真实内部依赖实施 是

文档影响

  • 不影响长期文档,原因:不适用
  • 更新项目档案或本地开发与验证
  • 更新架构与代码地图
  • 更新业务规则与术语
  • 更新常见修改或故障排查
  • 更新其他 Wiki 页面:ONVIF/RTSP 接入流程、状态/错误语义、凭据与超时边界

交付文档影响

  • 无交付文档影响,原因:不适用
  • 更新已有交付文档,受众与页面:实施/运维人员,摄像头发现、手工接入、重新探测和认证排错
  • 新增交付文档,受众与页面:
  • 需要目标岗位或客户代表验证:是;验证方式:至少一台获准实验室摄像头完成 Profile、主/子码流和认证失败恢复检查

验收标准

  • 可发现或手工添加实验室摄像头,并把结果关联到已有 Device。
  • 可获取并展示 Profiles,选定主/子码流并得到明确 RTSP 验证结果。
  • 认证失败、不可达、超时、时间漂移和重新探测具有可定位状态,不泄漏凭据。
  • 凭据更新后可安全重试,API/UI/日志不回显密码或含凭据 URI。
  • 自动化夹具在 Brain、Bell 未启动时通过;真机未具备时明确保留未验证项。

验证方式

cd Sense\server
go test ./app/sense/adapters/onvif/... ./app/sense/adapters/rtsp/... ./app/sense/admission/...
go test ./tests/admission/...
cd ..\ui
pnpm lint
pnpm build

除命令验证外,按验收标准执行 Sense 独立人工检查;Brain、Bell 保持未启动。若所需实验室摄像头或 MediaMTX 二进制不可用,必须明确记录未验证边界,不得用模拟结果冒充真机结果。

风险和回退

风险:网络发现范围、设备兼容性、认证信息和超时资源泄漏。默认限制发现网卡/时长与并发;不得扫描未授权网络。回退:关闭接入模块路由/菜单并回退提交,保留 Device 台账;不自动删除已登记设备。

## 当前状态:已完成 用户于 2026-08-14 明确验收通过。 ## 基本信息 - 类型:需求 - 任务类型:单项目 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP / 版本:#8 - 阶段:阶段 1(三条独立纵切) ## 依赖与并行 - 前置工单:#23 - 是否允许与前置工单并行:否 - 原因:接入结果必须关联已建立的 Sense Device,并复用其凭据安全和审计边界。 ## 子项目影响 - 仅影响的子项目 / 交付单元:Sense - 是否跨子项目:否 - 是否修改共享接口或契约:否;唯一事实来源:Sense 项目内部模型、端口和夹具 - write_paths: - `Sense/server/app/sense/adapters/onvif/` - `Sense/server/app/sense/adapters/rtsp/` - `Sense/server/app/sense/admission/` - `Sense/ui/src/api/sense/admission/` - `Sense/ui/src/views/sense/admission/` - `Sense/ui/src/router/modules/sense-admission.js` - `Sense/tests/admission/` - `Sense/testdata/onvif/` - 各子项目需要执行的验证:仅 Sense 执行本工单“验证方式”;Brain、Bell 无需启动或验证 ## 协同接口 - 生产者:不适用 - 消费者:不适用 - 契约/共享事实源:不适用;跨端数据只预留 Sense 内部适配器端口,不在本工单冻结共享结构 - 兼容策略:不适用 - 被阻塞或需要适配的工单:不适用 - 集成顺序:不适用 ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-12 - 关键原话或脱敏摘要:先创建三个项目全部独立 MVP 工单,标题带项目英文简称;独立任务不依赖其他项目在线,按 MVP 和真实依赖推进。 ## 要解决什么 需要让实施人员在 Sense 内发现或手工添加实验室摄像头,读取 ONVIF Profiles/StreamUri 并验证主辅 RTSP 码流,同时明确认证失败、校时、重新探测和凭据更新结果。 ## 做什么 / 不做什么 - 做: - 实现受控 ONVIF 发现与手工地址接入,关联 Sense Device。 - 读取 Profiles、分辨率/编码与 StreamUri,标识主/子码流并执行可超时的 RTSP 验证。 - 处理认证失败、不可达、时间漂移、重新探测和凭据更新后的重试。 - 提供不含真实地址/凭据的 ONVIF/RTSP 夹具测试,并单独记录真机验证。 - 不做: - 不启动或配置 MediaMTX,不实现浏览器播放和区域配置。 - 不把摄像头密码放入 URL、日志、工单、夹具或响应。 - 不实现 GB/T 28181、厂商私有 SDK 或 16 路批量开通。 ## 已确认方案 - 把 ONVIF、RTSP 和准入编排隔离为可替换内部适配器,超时/重试有边界。 - Stream URI 在持久化和响应前剥离/隔离凭据,前端只显示脱敏端点和验证状态。 - Profile 形成 Sense 内部版本化快照,能力变化供后续区域重新校准提示使用。 - 使用项目内模拟服务/录制响应测试,实验室真机结果独立标注。 预计修改文件: - `Sense/server/app/sense/adapters/onvif/` - `Sense/server/app/sense/adapters/rtsp/` - `Sense/server/app/sense/admission/` - `Sense/ui/src/api/sense/admission/` - `Sense/ui/src/views/sense/admission/` - `Sense/ui/src/router/modules/sense-admission.js` - `Sense/tests/admission/` - `Sense/testdata/onvif/` ## 需求变化记录 | 日期 | 变化内容 | 原因 | 用户确认 | |---|---|---|---| | 2026-08-12 | 将 Sense 首个纵切按骨架、认证、设备、接入、媒体、监看、区域拆为独立单元工单 | 支持三个项目并行并按真实内部依赖实施 | 是 | ## 文档影响 - [ ] 不影响长期文档,原因:不适用 - [x] 更新项目档案或本地开发与验证 - [x] 更新架构与代码地图 - [x] 更新业务规则与术语 - [x] 更新常见修改或故障排查 - [x] 更新其他 Wiki 页面:ONVIF/RTSP 接入流程、状态/错误语义、凭据与超时边界 ## 交付文档影响 - [ ] 无交付文档影响,原因:不适用 - [x] 更新已有交付文档,受众与页面:实施/运维人员,摄像头发现、手工接入、重新探测和认证排错 - [ ] 新增交付文档,受众与页面: - [x] 需要目标岗位或客户代表验证:是;验证方式:至少一台获准实验室摄像头完成 Profile、主/子码流和认证失败恢复检查 ## 验收标准 - [ ] 可发现或手工添加实验室摄像头,并把结果关联到已有 Device。 - [ ] 可获取并展示 Profiles,选定主/子码流并得到明确 RTSP 验证结果。 - [ ] 认证失败、不可达、超时、时间漂移和重新探测具有可定位状态,不泄漏凭据。 - [ ] 凭据更新后可安全重试,API/UI/日志不回显密码或含凭据 URI。 - [ ] 自动化夹具在 Brain、Bell 未启动时通过;真机未具备时明确保留未验证项。 ## 验证方式 ```powershell cd Sense\server go test ./app/sense/adapters/onvif/... ./app/sense/adapters/rtsp/... ./app/sense/admission/... go test ./tests/admission/... cd ..\ui pnpm lint pnpm build ``` 除命令验证外,按验收标准执行 Sense 独立人工检查;Brain、Bell 保持未启动。若所需实验室摄像头或 MediaMTX 二进制不可用,必须明确记录未验证边界,不得用模拟结果冒充真机结果。 ## 风险和回退 风险:网络发现范围、设备兼容性、认证信息和超时资源泄漏。默认限制发现网卡/时长与并发;不得扫描未授权网络。回退:关闭接入模块路由/菜单并回退提交,保留 Device 台账;不自动删除已登记设备。
ila added the kind/taskpriority/p0project/sensescope/independent labels 2026-08-12 09:58:27 +08:00
Author
Owner

状态:进行中(2026-08-12)

前置 #23 已完成测试和提交 5b8f4a4。新增精确 write_paths:

  • Sense/server/cmd/sense/modules_admission.go:挂载接入模块。
  • Sense/server/app/sense/device/credential_port.go:只向项目内接入适配器解密指定设备凭据;HTTP/UI 仍不可读取,调用结果不得日志化。

ONVIF 网络发现默认关闭,只有仓库外显式配置获准网卡后才允许发送受控发现;自动化仅使用项目夹具。

## 状态:进行中(2026-08-12) 前置 #23 已完成测试和提交 `5b8f4a4`。新增精确 write_paths: - `Sense/server/cmd/sense/modules_admission.go`:挂载接入模块。 - `Sense/server/app/sense/device/credential_port.go`:只向项目内接入适配器解密指定设备凭据;HTTP/UI 仍不可读取,调用结果不得日志化。 ONVIF 网络发现默认关闭,只有仓库外显式配置获准网卡后才允许发送受控发现;自动化仅使用项目夹具。
ila referenced this issue from a commit 2026-08-12 17:48:54 +08:00
Author
Owner

状态:待验收

  • 实现提交:4f17cca
  • 汇总文档提交:5177861
  • 最终归档提交:6d90d54(#21 的首次归档提交另为 2c0e37e)
  • 分支:agent/codex/21-sense-mvp
  • Pull Request:#34
  • Wiki 归档:Task-24-ONVIF与RTSP视频接入验证
  • Wiki revision:0f3da06cbe73(短哈希)

最终全量验证:Go 1.26.5 vet、全包 race、非缓存测试、build;pnpm 9.15.1 冻结安装、lint、build;Sense 独立 smoke;Harness strict 与 31 项测试;Wiki 镜像一致性;git diff --check,全部通过。前端仅有 vendor bundle 体积建议警告。

未验证部分:未扫描真实网络,未验证实验室摄像机 ONVIF/RTSP 兼容。

工单保持 open,等待用户验收;未关闭、未代替用户确认真实环境结果。

## 状态:待验收 - 实现提交:`4f17cca` - 汇总文档提交:`5177861` - 最终归档提交:`6d90d54`(#21 的首次归档提交另为 `2c0e37e`) - 分支:`agent/codex/21-sense-mvp` - Pull Request:https://git.ilapage.cn/ila/yovision/pulls/34 - Wiki 归档:`Task-24-ONVIF与RTSP视频接入验证` - Wiki revision:`0f3da06cbe73`(短哈希) 最终全量验证:Go 1.26.5 vet、全包 race、非缓存测试、build;pnpm 9.15.1 冻结安装、lint、build;Sense 独立 smoke;Harness strict 与 31 项测试;Wiki 镜像一致性;`git diff --check`,全部通过。前端仅有 vendor bundle 体积建议警告。 **未验证部分**:未扫描真实网络,未验证实验室摄像机 ONVIF/RTSP 兼容。 工单保持 open,等待用户验收;未关闭、未代替用户确认真实环境结果。
Author
Owner

用户验收通过(2026-08-14)

用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision 8dc063d91d05)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 explore 追溯。

此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 dev 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。

## 用户验收通过(2026-08-14) 用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision `8dc063d91d05`)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 `explore` 追溯。 此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 `dev` 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。
ila closed this issue 2026-08-14 10:06:46 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#24