[SEN] 在 GoAdmin 基线上重建单路实时监看与播放状态反馈 #68

Closed
opened 2026-08-14 10:26:39 +08:00 by ila · 3 comments
Owner

状态

已完成

基本信息

  • 类型:需求 / 新 GoAdmin 基线重建
  • 任务类型:单项目独立任务
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP:#8
  • 前置工单:#67
  • 是否允许与前置工单并行:否
  • 原因:实时监看需要已对账的 MediaMTX 路径、Profile 和可访问播放端点。
  • 独立运行:Brain、Bell 均不启动时完成实现和验收

原始需求与追溯

  • 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。
  • 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 explore 只用于业务、测试和故障证据,不复制自研基础框架。
  • 历史对照:#26、#51、#54 的等待拉流、iframe 拒绝、stream not found 和冷启动恢复证据。

目标

面向网管和非技术人员提供设备列表与单路实时画面,支持主/子 Profile、加载、等待拉流、失败、重连和可行动排错。

做什么

复用 go-admin-ui 页面容器、搜索、表格、分页、Tag 和 Dialog;仅为视频播放器新增业务组件;按需拉流时先建立 reader,再展示实际状态,避免循环等待。

不做什么

不一次加载全部视频;不实现多画面墙;不直接暴露 RTSP 凭据或内部路径;不修改 MediaMTX 核心进程逻辑。

GoAdmin 复用与文档门禁

  • 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。
  • 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。
  • 冻结 go-admin-doc 必查:go-admin-ui src/layout/**、src/router/**、src/api/** 及已有页面容器、表格、分页、Dialog、Tag。
  • 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。
  • 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。

写路径

  • Sense/server/app/sense/liveview/**
  • Sense/server/app/admin/router/sense_liveview.go
  • Sense/server/cmd/migrate/migration/version/*liveview*
  • Sense/ui/src/views/sense/liveview/**
  • Sense/ui/src/api/sense/liveview*
  • Sense/ui/src/components/sense/video-player/**
  • Sense/tests/liveview/**
  • Sense/ui/tests/unit/sense/liveview*.spec.js

禁止写入:Brain/**、Bell/**、contracts/**、根级部署配置、docs/**、wiki-docs.json。如实现发现必须修改这些路径,停止并转协同工单。

文档影响

更新实时监看入口、播放会话、状态含义、浏览器要求和常见错误处理。

长期文档先更新 Gitea Wiki;本地 docs/ 镜像由单一协调工单同步,避免共享路径冲突。

验收标准

  • 设备与 Profile 可搜索、分页并进入单路实时监看
  • waiting 且播放 URL 有效时播放器能建立 reader,不形成循环等待
  • 加载、空、认证失败、stream not found、重连和超时状态可区分
  • 页面不暴露摄像头凭据与内部文件路径
  • 128 路站点使用分页或虚拟列表,不同时创建全部播放器
  • 通用组件无重复实现,新增播放器风格与 go-admin-ui 一致

验证方式

  • 播放会话、权限、状态映射与 URL 安全测试
  • 前端播放器生命周期、按需拉流回归、lint 和 build
  • 真实 MediaMTX + 测试摄像机的浏览器 smoke
  • Brain/Bell 不启动的单路监看验收

风险与回退

浏览器协议、端口和按需拉流时序易产生假就绪。以前端 reader 和后端实际态双向验证;回退播放器页面和会话端点。

协同需求摘要

本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。

需求变化记录

  • 2026-08-14:实施前检查确认,独立 liveview 包若不注册 GoAdmin Router/Casbin 与动态菜单将无法形成可访问纵切,因此将 Sense/server/app/admin/router/sense_liveview.go 和 Sense/server/cmd/migrate/migration/version/*liveview* 纳入写路径。仍只影响 Sense,目标、接口边界、验收结果及跨项目范围不变。
  • 2026-08-14:为验证播放状态文字、颜色语义与可行动提示,补充 Sense/ui/tests/unit/sense/liveview*.spec.js 精确测试写路径;不改变产品行为或跨项目范围。

实施结果(2026-08-14)

  • Pull Request:#86 #86(目标 dev,保持开启,等待人工验收)。
  • 实现提交:c63c623;长期文档镜像提交:a279a1e;待验收归档镜像提交:c83c181。
  • 后端新增分页设备/Profile 投影、用户绑定的 192 位随机短期播放会话、同用户单会话、2 分钟无活动失效、同源能力播放器包装页和 GoAdmin Router/JWT/Casbin/动态菜单。
  • 前端复用 BasicLayout、Element Plus 搜索/表格/分页/Dialog/Tag、全局 Pagination 和权限指令;只新增视频播放器业务组件,关闭/卸载时清理 reader 相关 iframe、轮询和超时计时器。
  • go test ./...、go vet ./...、go build ./... 通过;go test -race ./app/sense/liveview 通过。
  • PostgreSQL 17 隔离实例定向迁移通过:1 个菜单、9 条 Casbin 策略、1 条迁移记录;临时实例、schema 和数据目录已清理。
  • 前端 lint 0 error(32 条冻结上游 warning);13 suites / 40 tests 通过;生产构建通过(6 条冻结上游 warning)。
  • MediaMTX v1.19.3 + FFmpeg 合成 RTSP + Edge WebRTC smoke 通过:视频 640×360、readyState=4、自动播放中;临时 MediaMTX/FFmpeg 进程、配置和自动证书已清理。
  • 安全验证:列表/会话 JSON 不含 Stream URI、内部媒体路径或凭据;公开播放器只接受短期高熵能力地址,并设置 no-store、no-referrer、SAMEORIGIN 和 CSP。
  • 长期 Wiki:Architecture 0a15795a、Business Rules e80685e1、Local Development 95be7e2a、Troubleshooting 331755cb,均已读取确认并导出镜像。
  • 任务归档 Wiki:Task-68-Sense单路实时监看与播放状态反馈,revision 9e23cebb9bf4d9f7fd0de838cba860147b96468f;sync_wiki_docs.py --check 通过。
  • 未验证:客户真实摄像机、现场防火墙/证书、实际部署反向代理和客户目标浏览器;需授权现场验收。

验收与合并(2026-08-15)

  • 用户明确回复“#68 验收通过”。
  • PR #86 已合入 dev,合并提交:020bf3fe5a92b91ab949629b040aec917d787581。
  • 任务归档 Wiki 已更新为“已完成”,revision:88e542d512e472274a74e443a761217e24618941。
  • 验收归档镜像提交:17c1afd;Wiki 镜像一致性检查通过。
  • main 未修改。
## 状态 已完成 ## 基本信息 - 类型:需求 / 新 GoAdmin 基线重建 - 任务类型:单项目独立任务 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP:#8 - 前置工单:#67 - 是否允许与前置工单并行:否 - 原因:实时监看需要已对账的 MediaMTX 路径、Profile 和可访问播放端点。 - 独立运行:Brain、Bell 均不启动时完成实现和验收 ## 原始需求与追溯 - 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。 - 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 `explore` 只用于业务、测试和故障证据,不复制自研基础框架。 - 历史对照:#26、#51、#54 的等待拉流、iframe 拒绝、stream not found 和冷启动恢复证据。 ## 目标 面向网管和非技术人员提供设备列表与单路实时画面,支持主/子 Profile、加载、等待拉流、失败、重连和可行动排错。 ## 做什么 复用 go-admin-ui 页面容器、搜索、表格、分页、Tag 和 Dialog;仅为视频播放器新增业务组件;按需拉流时先建立 reader,再展示实际状态,避免循环等待。 ## 不做什么 不一次加载全部视频;不实现多画面墙;不直接暴露 RTSP 凭据或内部路径;不修改 MediaMTX 核心进程逻辑。 ## GoAdmin 复用与文档门禁 - 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。 - 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。 - 冻结 go-admin-doc 必查:go-admin-ui `src/layout/**`、`src/router/**`、`src/api/**` 及已有页面容器、表格、分页、Dialog、Tag。 - 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。 - 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。 ## 写路径 - `Sense/server/app/sense/liveview/**` - `Sense/server/app/admin/router/sense_liveview.go` - `Sense/server/cmd/migrate/migration/version/*liveview*` - `Sense/ui/src/views/sense/liveview/**` - `Sense/ui/src/api/sense/liveview*` - `Sense/ui/src/components/sense/video-player/**` - `Sense/tests/liveview/**` - `Sense/ui/tests/unit/sense/liveview*.spec.js` 禁止写入:`Brain/**`、`Bell/**`、`contracts/**`、根级部署配置、`docs/**`、`wiki-docs.json`。如实现发现必须修改这些路径,停止并转协同工单。 ## 文档影响 更新实时监看入口、播放会话、状态含义、浏览器要求和常见错误处理。 长期文档先更新 Gitea Wiki;本地 `docs/` 镜像由单一协调工单同步,避免共享路径冲突。 ## 验收标准 - [x] 设备与 Profile 可搜索、分页并进入单路实时监看 - [x] waiting 且播放 URL 有效时播放器能建立 reader,不形成循环等待 - [x] 加载、空、认证失败、stream not found、重连和超时状态可区分 - [x] 页面不暴露摄像头凭据与内部文件路径 - [x] 128 路站点使用分页或虚拟列表,不同时创建全部播放器 - [x] 通用组件无重复实现,新增播放器风格与 go-admin-ui 一致 ## 验证方式 - 播放会话、权限、状态映射与 URL 安全测试 - 前端播放器生命周期、按需拉流回归、lint 和 build - 真实 MediaMTX + 测试摄像机的浏览器 smoke - Brain/Bell 不启动的单路监看验收 ## 风险与回退 浏览器协议、端口和按需拉流时序易产生假就绪。以前端 reader 和后端实际态双向验证;回退播放器页面和会话端点。 ## 协同需求摘要 本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。 ## 需求变化记录 - 2026-08-14:实施前检查确认,独立 `liveview` 包若不注册 GoAdmin Router/Casbin 与动态菜单将无法形成可访问纵切,因此将 `Sense/server/app/admin/router/sense_liveview.go` 和 `Sense/server/cmd/migrate/migration/version/*liveview*` 纳入写路径。仍只影响 Sense,目标、接口边界、验收结果及跨项目范围不变。 - 2026-08-14:为验证播放状态文字、颜色语义与可行动提示,补充 `Sense/ui/tests/unit/sense/liveview*.spec.js` 精确测试写路径;不改变产品行为或跨项目范围。 ## 实施结果(2026-08-14) - Pull Request:#86 https://git.ilapage.cn/ila/yovision/pulls/86(目标 `dev`,保持开启,等待人工验收)。 - 实现提交:`c63c623`;长期文档镜像提交:`a279a1e`;待验收归档镜像提交:`c83c181`。 - 后端新增分页设备/Profile 投影、用户绑定的 192 位随机短期播放会话、同用户单会话、2 分钟无活动失效、同源能力播放器包装页和 GoAdmin Router/JWT/Casbin/动态菜单。 - 前端复用 BasicLayout、Element Plus 搜索/表格/分页/Dialog/Tag、全局 Pagination 和权限指令;只新增视频播放器业务组件,关闭/卸载时清理 reader 相关 iframe、轮询和超时计时器。 - `go test ./...`、`go vet ./...`、`go build ./...` 通过;`go test -race ./app/sense/liveview` 通过。 - PostgreSQL 17 隔离实例定向迁移通过:1 个菜单、9 条 Casbin 策略、1 条迁移记录;临时实例、schema 和数据目录已清理。 - 前端 lint 0 error(32 条冻结上游 warning);13 suites / 40 tests 通过;生产构建通过(6 条冻结上游 warning)。 - MediaMTX v1.19.3 + FFmpeg 合成 RTSP + Edge WebRTC smoke 通过:视频 `640×360`、`readyState=4`、自动播放中;临时 MediaMTX/FFmpeg 进程、配置和自动证书已清理。 - 安全验证:列表/会话 JSON 不含 Stream URI、内部媒体路径或凭据;公开播放器只接受短期高熵能力地址,并设置 no-store、no-referrer、SAMEORIGIN 和 CSP。 - 长期 Wiki:Architecture `0a15795a`、Business Rules `e80685e1`、Local Development `95be7e2a`、Troubleshooting `331755cb`,均已读取确认并导出镜像。 - 任务归档 Wiki:`Task-68-Sense单路实时监看与播放状态反馈`,revision `9e23cebb9bf4d9f7fd0de838cba860147b96468f`;`sync_wiki_docs.py --check` 通过。 - 未验证:客户真实摄像机、现场防火墙/证书、实际部署反向代理和客户目标浏览器;需授权现场验收。 ## 验收与合并(2026-08-15) - 用户明确回复“#68 验收通过”。 - PR #86 已合入 `dev`,合并提交:`020bf3fe5a92b91ab949629b040aec917d787581`。 - 任务归档 Wiki 已更新为“已完成”,revision:`88e542d512e472274a74e443a761217e24618941`。 - 验收归档镜像提交:`17c1afd`;Wiki 镜像一致性检查通过。 - `main` 未修改。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-14 10:26:39 +08:00
Author
Owner

开始实施。前置 #67 已验收关闭,分支 feature/68-sense-liveview 从最新 dev 创建,工作区初始干净。已阅读冻结 go-admin-doc docs/intro/advanced/router.md、docs/intro/advanced/api.md,以及冻结 go-admin-ui src/layout/BasicLayout.vue、src/router/index.js、src/api/admin/sys-user.js、src/views/admin/sys-user/index.vue、src/components/Pagination/index.vue。采用 GoAdmin Router/JWT/Casbin/动态菜单、Axios、BasicLayout、Element Plus 搜索/表格/分页/Dialog/Tag;仅新增视频播放器业务组件。UI 检查采用清晰加载/错误/恢复操作、固定 16:9 空间、分页按需播放、可见焦点和组件卸载清理。

开始实施。前置 #67 已验收关闭,分支 `feature/68-sense-liveview` 从最新 `dev` 创建,工作区初始干净。已阅读冻结 go-admin-doc `docs/intro/advanced/router.md`、`docs/intro/advanced/api.md`,以及冻结 go-admin-ui `src/layout/BasicLayout.vue`、`src/router/index.js`、`src/api/admin/sys-user.js`、`src/views/admin/sys-user/index.vue`、`src/components/Pagination/index.vue`。采用 GoAdmin Router/JWT/Casbin/动态菜单、Axios、BasicLayout、Element Plus 搜索/表格/分页/Dialog/Tag;仅新增视频播放器业务组件。UI 检查采用清晰加载/错误/恢复操作、固定 16:9 空间、分页按需播放、可见焦点和组件卸载清理。
Author
Owner

待验收证据(2026-08-14)

  • PR:#86(feature/68-sense-liveview → dev),保持开启,未合并。
  • 提交:c63c623(实现)、a279a1e(长期文档)、c83c181(任务归档镜像)。
  • 后端:go test ./...、go vet ./...、go build ./...、go test -race ./app/sense/liveview 全部通过。
  • 数据库:PostgreSQL 17 隔离迁移通过(1 菜单、9 Casbin 策略、1 迁移记录),临时环境已清理。
  • 前端:lint 0 error(32 条冻结上游 warning);13 suites / 40 tests 通过;生产构建通过(6 条冻结上游 warning)。
  • 真实播放 smoke:MediaMTX v1.19.3 + FFmpeg 合成 RTSP + Edge WebRTC,640×360、readyState=4、自动播放中;临时进程和文件已清理。
  • 安全:API 不返回 RTSP URI、凭据或内部路径;公开播放器使用短期高熵能力地址和安全响应头。
  • Wiki 归档:Task-68-Sense单路实时监看与播放状态反馈,revision 9e23cebb9bf4d9f7fd0de838cba860147b96468f;镜像一致性检查通过。
  • 未验证:客户真实摄像机、现场防火墙/证书、实际反向代理与客户目标浏览器,留待现场验收。

当前状态:待验收。

## 待验收证据(2026-08-14) - PR:#86(`feature/68-sense-liveview` → `dev`),保持开启,未合并。 - 提交:`c63c623`(实现)、`a279a1e`(长期文档)、`c83c181`(任务归档镜像)。 - 后端:`go test ./...`、`go vet ./...`、`go build ./...`、`go test -race ./app/sense/liveview` 全部通过。 - 数据库:PostgreSQL 17 隔离迁移通过(1 菜单、9 Casbin 策略、1 迁移记录),临时环境已清理。 - 前端:lint 0 error(32 条冻结上游 warning);13 suites / 40 tests 通过;生产构建通过(6 条冻结上游 warning)。 - 真实播放 smoke:MediaMTX v1.19.3 + FFmpeg 合成 RTSP + Edge WebRTC,640×360、readyState=4、自动播放中;临时进程和文件已清理。 - 安全:API 不返回 RTSP URI、凭据或内部路径;公开播放器使用短期高熵能力地址和安全响应头。 - Wiki 归档:`Task-68-Sense单路实时监看与播放状态反馈`,revision `9e23cebb9bf4d9f7fd0de838cba860147b96468f`;镜像一致性检查通过。 - 未验证:客户真实摄像机、现场防火墙/证书、实际反向代理与客户目标浏览器,留待现场验收。 当前状态:**待验收**。
ila closed this issue 2026-08-15 08:42:28 +08:00
Author
Owner

用户于 2026-08-15 验收通过。PR #86 已合入 dev(merge 020bf3fe5a92b91ab949629b040aec917d787581);归档 Wiki revision 88e542d512e472274a74e443a761217e24618941,镜像提交 17c1afd,一致性检查通过。工单关闭;main 未修改。

用户于 2026-08-15 验收通过。PR #86 已合入 `dev`(merge `020bf3fe5a92b91ab949629b040aec917d787581`);归档 Wiki revision `88e542d512e472274a74e443a761217e24618941`,镜像提交 `17c1afd`,一致性检查通过。工单关闭;`main` 未修改。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#68