From 9e23cebb9bf4d9f7fd0de838cba860147b96468f Mon Sep 17 00:00:00 2001 From: ila <2+ila@noreply.git.ilapage.cn> Date: Fri, 14 Aug 2026 18:52:27 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=AE=8C=E5=96=84=E5=B7=A5=E5=8D=95=20?= =?UTF-8?q?#68=20=E5=BE=85=E9=AA=8C=E6=94=B6=E5=BD=92=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...E%E7%8A%B6%E6%80%81%E5%8F%8D%E9%A6%88.-.md | 56 +++++++++++++------ 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/Task-68-Sense%E5%8D%95%E8%B7%AF%E5%AE%9E%E6%97%B6%E7%9B%91%E7%9C%8B%E4%B8%8E%E6%92%AD%E6%94%BE%E7%8A%B6%E6%80%81%E5%8F%8D%E9%A6%88.-.md b/Task-68-Sense%E5%8D%95%E8%B7%AF%E5%AE%9E%E6%97%B6%E7%9B%91%E7%9C%8B%E4%B8%8E%E6%92%AD%E6%94%BE%E7%8A%B6%E6%80%81%E5%8F%8D%E9%A6%88.-.md index b55ecd7..27457d1 100644 --- a/Task-68-Sense%E5%8D%95%E8%B7%AF%E5%AE%9E%E6%97%B6%E7%9B%91%E7%9C%8B%E4%B8%8E%E6%92%AD%E6%94%BE%E7%8A%B6%E6%80%81%E5%8F%8D%E9%A6%88.-.md +++ b/Task-68-Sense%E5%8D%95%E8%B7%AF%E5%AE%9E%E6%97%B6%E7%9B%91%E7%9C%8B%E4%B8%8E%E6%92%AD%E6%94%BE%E7%8A%B6%E6%80%81%E5%8F%8D%E9%A6%88.-.md @@ -1,42 +1,66 @@ # 68 Sense单路实时监看与播放状态反馈 -- 类型:需求 / 缺陷 / 重构 -- 所属 Epic:# -- 所属 MVP / 版本:# -- 状态:待验收 / 已完成 +- 类型:需求 +- 所属 Epic:#7 +- 所属 MVP / 版本:#8 +- 状态:待验收 - 日期:2026-08-14 - Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/68 -- Wiki 页面:Task-68-Sense单路实时监看与播放状态反馈 -- Wiki revision:见本地镜像头 +- Pull Request:https://git.ilapage.cn/ila/yovision/pulls/86 +- 主项目:Sense ## 背景与目标 - +在 #67 已对账的 MediaMTX 路径上,为网管和非技术人员提供设备/Profile 搜索、分页和单路实时查看。Brain、Bell 不启动时可独立运行;页面不得暴露摄像头凭据、RTSP URI或内部媒体路径。 ## 最终方案 - +- 后端在 `app/sense/liveview` 建立只含展示字段的分页投影,最多返回 50 条,不把 16/128 路变成硬上限。 +- 登录用户选择一路后创建 192 位随机播放能力;令牌绑定用户、同用户只保留一个会话,认证轮询时按 2 分钟无活动窗口续期,关闭页面后失效。 +- JSON 只返回同源 `/api/v1/liveview/player/<能力>`;包装页使用 no-store、no-referrer、SAMEORIGIN 与 CSP,再嵌入浏览器可达的 MediaMTX WebRTC 页面。 +- 默认由 Sense 请求主机推导 WebRTC 8889;反向代理、HTTPS 或端口映射通过安全的 `SENSE_MEDIAMTX_WEBRTC_PUBLIC_BASE` 显式配置。 +- 复用 GoAdmin Router/JWT/Casbin/迁移/动态菜单及 go-admin-ui BasicLayout、Axios、Element Plus 搜索/表格/分页/Dialog/Tag/权限按钮;只新增播放器业务组件。 +- waiting 时先保留 iframe 建立 reader;ready 后持续轮询,20 秒未就绪显示超时。关闭 Dialog 或组件卸载会清理 iframe、轮询和超时计时器。 +- 状态区分 loading、waiting、ready、authentication_failed、stream_not_found、service_unavailable、timeout、expired、offline 和 stopped,并给出可行动中文处理建议。 ## 修改文件 -- `<文件>`:<改动说明> +- `Sense/server/app/sense/liveview/**`:分页投影、短期会话、播放器包装页及测试。 +- `Sense/server/app/admin/router/sense_liveview.go`:认证 API 与短期播放器路由。 +- `Sense/server/cmd/migrate/migration/version/*liveview*`:菜单、角色和 Casbin 权限。 +- `Sense/ui/src/views/sense/liveview/**`、`api/sense/liveview.js`:实时监看页面、状态映射和请求。 +- `Sense/ui/src/components/sense/video-player/**`:唯一业务专用播放器组件。 +- `Sense/ui/tests/unit/sense/liveview*.spec.js`:状态、iframe 和页面计时器生命周期测试。 +- Wiki Architecture、Business Rules、Local Development、Troubleshooting:架构、安全、配置、验证和排错。 ## 验收结果 | 验收标准 | 结果 | |---|---| -| | 通过 / 未通过 | +| 设备与 Profile 可搜索、分页并进入单路实时监看 | 通过 | +| waiting 且播放 URL 有效时建立 reader,不循环等待 | 通过;真实合成 WebRTC smoke | +| 加载、空、认证失败、stream not found、重连和超时可区分 | 通过 | +| 页面不暴露凭据与内部文件路径 | 通过;DTO/JSON 测试与扫描 | +| 128 路使用分页且不同时创建全部播放器 | 通过;服务端最大页 50,前端单 Dialog | +| 通用组件无重复实现且播放器风格一致 | 通过 | ## 测试 -- 执行命令:`<命令>` -- 结果: -- **未验证部分**: +- `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:640×360、readyState=4、自动播放中;临时进程、配置和自动证书已清理。 +- Wiki 页面读取确认并成功导出镜像。 +- **未验证部分**:客户真实摄像机、现场防火墙/证书、实际部署反向代理和客户目标浏览器,需授权现场验收。 -## 遗留问题 +## 风险与回退 - +回退 PR #86 可移除实时监看入口、会话 API、菜单和播放器组件;#67 的设备/Profile、媒体路由与 MediaMTX 生命周期不受影响。内存会话随进程退出自然失效,无数据库业务数据需要回滚。 ## 相关提交 -- `<提交哈希>` <提交说明> +- `c63c623` feat: 重建 Sense 单路实时监看 (#68) +- `a279a1e` docs: 记录 Sense 实时监看架构 (#68)