# 02:最新指标入口与匿名实时视频——实施及验收记录 ## 交付范围 本票交付首条链:既有设备选择/详情 → **最新指标 TAB** → 监控 → 中心面板 → 驾驶舱视频专用接口 → 可见播放状态与自身资源释放。不是管理端页面复制,不新增台账、信令或媒体系统。 - [共用详情分区](<../src/modules/cockpit/components/EquipmentDetailSections.vue>)只新增独立[监控入口](<../src/modules/cockpit/components/VideoMonitorEntry.vue>),位于 metrics TAB、独立于采集记录成败。未以名称或行业猜摄像机,身份与能力由专用接口提供。 - [路由根组件](<../src/pages/cockpit/index.vue>)挂载一份[全局监控面板](<../src/modules/cockpit/components/VideoMonitorPanel.vue>)。现有固定详情、地下管线详情也消费同一详情组件,不人为禁用其他宿主;三入口全面验证与复杂生命周期强化仍属于03。 - [视频适配](<../src/modules/cockpit/services/videoApi.js>)使用现有部署配置的 API baseUrl,免业务账号/Bearer;归属凭据仅发给对应会话的心跳/停止,不显示在DOM、不存浏览器持久化、不附到媒体URL。 - [会话编排](<../src/modules/cockpit/services/videoLiveSession.js>)沿用既有实时helper的单会话/代次/迟到释放模式,适配匿名凭据。建流可见等待上限35秒、播放器就绪20秒;30秒观看心跳不等于播放就绪。只由 playing 确认画面,不自动重连(04职责)。 - 关闭、隐藏/离页、切一级模式或设备选择改变执行基础释放;失败与未知结果单独呈现,清理未确认保留重试并阻止新建。未返回会话标识的未知启动不能推断无资源;需要服务端核查回收,不以重新加载页面保证清理。03须进一步完成跨宿主、迟到/未知启动的强化补偿。 - 历史/云台仅灰色占位,无申请、独占、租约、物理控制、截图、下载或录制。默认静音;原生控件限制下载/PiP/远端播放入口并非防止第三方录屏的承诺。 ## 播放器来源与协议 用户明确选择**浏览器原生 WebRTC / video**,不复制参考仓中来源/版本未明确且缺 Wasm 的 Jessibuca。详情见[来源核查]()。 - [播放器](<../src/modules/cockpit/services/videoPlayer.js>)通过原生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](<../src/modules/cockpit/services/videoLiveSession.js>)为参考应用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,审查前) - 前端:[入口旅程](<../tests/cockpit-video/journey.mjs>) **13/13**、[播放器边界](<../tests/cockpit-video/player.mjs>) **10/10**,共23项全通过。实际Vue SFC编译/Pinia store/LinkeDOM按钮事件走公开详情→最新指标→监控,不用私有函数或源码关键字代替入口。媒体播放与Peer是外部替身。 - [测试运行器](<../tests/cockpit-video/run.mjs>)的 `--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脚本。 复现命令(不启动服务): ```bash node tests/cockpit-video/run.mjs node tests/cockpit-video/run.mjs --baseline-only node tests/cockpit-video/player.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 ``` ## 当前收尾状态 前后端实现及离线回归已完成,双轴审查和独立提交进行中;本记录不宣称真实视频交付。由于项目规则已跳过应用build/debug、浏览器调试/截图、服务启停、真实数据库迁移和设备操作。所有实际验证均限定在用户已授权的离线编译/测试范围。