cockpit-video-monitoring-acceptance.md 9.3 KB

02:最新指标入口与匿名实时视频——实施及验收记录

交付范围

本票交付首条链:既有设备选择/详情 → 最新指标 TAB → 监控 → 中心面板 → 驾驶舱视频专用接口 → 可见播放状态与自身资源释放。不是管理端页面复制,不新增台账、信令或媒体系统。

  • 共用详情分区只新增独立监控入口,位于 metrics TAB、独立于采集记录成败。未以名称或行业猜摄像机,身份与能力由专用接口提供。
  • 路由根组件挂载一份全局监控面板。现有固定详情、地下管线详情也消费同一详情组件,不人为禁用其他宿主;三入口全面验证与复杂生命周期强化仍属于03。
  • 视频适配使用现有部署配置的 API baseUrl,免业务账号/Bearer;归属凭据仅发给对应会话的心跳/停止,不显示在DOM、不存浏览器持久化、不附到媒体URL。
  • 会话编排沿用既有实时helper的单会话/代次/迟到释放模式,适配匿名凭据。建流可见等待上限35秒、播放器就绪20秒;30秒观看心跳不等于播放就绪。只由 playing 确认画面,不自动重连(04职责)。
  • 关闭、隐藏/离页、切一级模式或设备选择改变执行基础释放;失败与未知结果单独呈现,清理未确认保留重试并阻止新建。未返回会话标识的未知启动不能推断无资源;需要服务端核查回收,不以重新加载页面保证清理。03须进一步完成跨宿主、迟到/未知启动的强化补偿。
  • 历史/云台仅灰色占位,无申请、独占、租约、物理控制、截图、下载或录制。默认静音;原生控件限制下载/PiP/远端播放入口并非防止第三方录屏的承诺。

播放器来源与协议

用户明确选择浏览器原生 WebRTC / video,不复制参考仓中来源/版本未明确且缺 Wasm 的 Jessibuca。详情见来源核查。

  • 播放器通过原生RTCPeerConnection接收轨道,按实际ZLM URL发送text/plain SDP offer、验证JSON code=0/type=answer及video SDP;ICE等待5秒,不配置公网STUN。Peer/轨道挂载本身不冒充正在播放。
  • 手动原生流直接使用支持的媒体URL,FLV不冒充原生video,WebRTC地址不塞进src。HTTP/HTTPS混合内容、userinfo、非法协议和HTML/信令错误进入明确失败。
  • 不需要发布第三方播放器/解码器文件;只新增应用源码。不改既有静态资源白名单。浏览器原生解码、设备编码、ZLM网络/HTTPS/信令/CORS/SIP/RTP仍待07真实验收。
  • 会话helper为参考应用MIT代码的兼容改写,源码保留MIT版权与许可通知。该MIT不用于推断任何Jessibuca授权。
  • 用户批准测试依赖 linkedom@0.18.15(ISC),通过 yarn add --dev --exact --ignore-scripts 安装,整次安装明确跳过所有脚本;没有新增canvas或播放SDK。新增锁文件均为测试DOM依赖闭包,原生产依赖版本未升级。LinkeDOM不是完整浏览器,不能验证真实媒体/布局/焦点像素行为。

后端合同与安全边界

代码在独立后端仓库,复用01的VideoDeviceService和会话表:

方法与路径(/api/cockpit/v1前缀) 输入 公开结果
GET /video/device query deviceCode,原样业务编码 设备编码/名称、typeCode、bound、逐项能力与不可用原因
POST /video/live JSON {deviceCode} 独立sessionId/sessionToken、LIVE、媒体白名单
POST /video/sessions/{id}/heartbeat JSON {sessionToken} 匹配sessionId、ACTIVE;不证明画面健康
POST /video/sessions/{id}/stop JSON {sessionToken} 匹配sessionId、STOPPED,自身观看资源幂等释放;不是云台STOP

后端适配按equipment_code精确查询并二次核对,斜杠/空格/百分号不重复解码;只有type20与真实合法绑定支持本票实时能力。历史/云台能力不因GB28181而默认支持。

安全配置仅增加device GET和三条POST精确例外,并在既有全驾驶舱GET规则之前限制其余video路径;旧 /api/video 与其他业务写权限不变。Controller成功/失败均no-store,固定中文分类与请求/服务时间,不透明透传底层错误或秘密。

媒体输出不含内部ID/国标绑定/stream/proxyKey/内部token。URL白名单拒绝userinfo、fragment与未知query;实际上游rtc/rtcs映射到webrtc。不剥掉密码后假报可用。不能发布媒体时释放新会话,失败明确CLEANUP_UNCONFIRMED。API免业务登录不证明部署内网隔离;媒体URL的网络访问安全不由CORS/隐藏按钮提供。

01的迁移脚本尚未执行;部署本票代码前必须先核对并执行迁移。现有01对未知启动/底层迟到取消的边界仍有效,后续03与07负责强化和真实验证。

离线验证(2026-11-11,审查前)

  • 前端:入口旅程 13/13、播放器边界 10/10、公开会话竞态 2/2,共25项全通过。实际Vue SFC编译/Pinia store/LinkeDOM按钮事件走公开详情→最新指标→监控,不用私有函数或源码关键字代替入口。媒体播放与Peer是外部替身。
  • 测试运行器的 --baseline-only 用开始时前端基点与已提交详情入口快照运行同一13项:全通过,不在夹具中重写产品接线。既有其它在制源文件不混入纯本票验证;工作树验证亦通过。既有mapService/panelBlocks重复键警告未在本票扩大修复。
  • 后端:新HTTP真实安全链60项、01旧HTTP36项与会话31项,127项全通过;真实SecurityConfig/JWT/方法权限/新旧业务模块,DB/Redis/媒体仅边界替身。
  • 原静态匿名规则测试因“只能有一条GET放行”与新视频例外冲突而RED;以7项实际HTTP鉴权行为覆盖旧GET/POST/default/WS路径后替换,不简单修改源码计数或禁用过滤器。只证明WS鉴权路径,不声称真实socket握手。
  • 完整后端管网reactor已运行:zksy-system 256项有2失败/1错误,zksy-admin 811项有17失败,总1067项含20项非视频失败/错误,与01记录的类别一致。本票不改这些模块,未另跑原始基点严格归因;maven.test.failure.ignore=true仅用于收齐结果,退出0不代表全绿。
  • 项目没有前端test/typecheck脚本或本票TS源:执行Node语法检查和SFC编译,不冒称tsc验证;前端全套指新增视频套件,未批量运行可能包含浏览器/网络请求的历史verify脚本。

复现命令(不启动服务):

node tests/cockpit-video/run.mjs
node tests/cockpit-video/run.mjs --baseline-only
node tests/cockpit-video/player.mjs
node tests/cockpit-video/session.mjs
# 在 E:/pipe-ner-server 根目录
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 mvn -o -pl pipe-network-service/zksy-admin -am -Dtest=CockpitVideoControllerTest,VideoDeviceCompatibilityTest,VideoSessionCompatibilityTest -Dsurefire.failIfNoSpecifiedTests=false test
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 mvn -o -pl pipe-network-service/zksy-admin -am -Dmaven.test.failure.ignore=true test

双轴审查(按用户确认的两仓基点)

  • Standards:首轮硬违规0,低优先建议2;已移除baseline测试中重复的产品接线片段,改读已提交详情组件快照;心跳测试标题已缩窄到实际播放后归属维护/错误清理,不夸大覆盖。
  • Spec:首轮确定阻断1——start在await stop()之后捕获代次,可能越过同轮close或新设备打开。已恢复停止前捕获代次,并以公开会话start(A)/start(B)、start(A)/stop()驱动两个回归,RED→GREEN;其余没有确证02缺项或越界。
  • 后续03–07的多宿主强化、五次重连、历史和物理云台验证不追认为本票已完成;真实网络与播放器编解码继续保持待验。

当前收尾状态

前后端实现及离线回归已完成,审查阻断与两项测试建议均已修复,正在最后读回;已独立提交前端cafb1652、后端01a66fad,未推送。代次修复另作中文独立提交。本记录不宣称真实视频交付。由于项目规则已跳过应用build/debug、浏览器调试/截图、服务启停、真实数据库迁移和设备操作。所有实际验证均限定在用户已授权的离线编译/测试范围。