状态: 已获用户确认,修改仅保留在本地工作区,不提交 Git。
为现有海康 NVR SDK 控制的 HLS 回放能力增加一个可直接打开的浏览器播放器。用户只需要在页面选择设备、日期和时间并点击查询,页面负责创建、轮询和控制回放会话,不再手工重复调用 Swagger 接口。
播放器覆盖当前后端已经支持的能力:
STARTING -> PLAYING;采用用户选择的 B 方案:NVR IP、SDK/RTSP 端口、账号和密码固定在 Spring Boot 后端配置中。页面只接收通道、码流类型和时间范围。
配置前缀为 hik.playback.ui:
hik:
playback:
ui:
device-name: 海康 NVR
nvr-ip: ${HIK_NVR_IP:192.168.1.249}
sdk-port: ${HIK_NVR_SDK_PORT:8000}
rtsp-port: ${HIK_NVR_RTSP_PORT:554}
username: ${HIK_NVR_USERNAME:admin}
password: ${HIK_NVR_PASSWORD:}
default-channel: 1
default-stream-type: 1
密码使用环境变量 HIK_NVR_PASSWORD,不会写入 HTML、Swagger 响应或日志。若密码为空,配置接口仍可打开页面,但创建会话时返回明确的配置错误。
GET /hik/nvr/playback/hls/ui/config
返回页面需要的非敏感配置、设备树和默认通道。返回对象不包含 password,并通过 configured 标识后端是否已经具备创建会话的必要配置。
POST /hik/nvr/playback/hls/ui/sessions
请求体只包含:
{
"channel": 1,
"streamType": 1,
"startTime": "2026-07-13 12:00:00",
"endTime": "2026-07-13 13:00:00"
}
控制台控制请求继续复用现有 /sessions/{sessionId}/controls 和 DELETE /sessions/{sessionId},避免复制回放状态机。
不引入 Node、React 或 Thymeleaf,使用 Spring Boot 静态资源目录中的 playback.html,通过 http://localhost:18080/playback.html 打开。这样与后端同源,接口无需额外 CORS 配置。
页面采用“工业监控台”视觉方向:冷白工作区、深海军蓝文字、单一高亮蓝色、细边框卡片、淡网格背景和有限的入场动画。布局包含:
SEEK;播放器使用 hls.js CDN,在 Chrome/Edge 中加载 HLS;Safari 等支持原生 HLS 的浏览器直接设置 video.src。当后端返回新的 generation 或 HLS 地址时,销毁旧实例并重新加载,防止跳转后继续使用旧切片。
STARTING 显示“等待首个关键帧”,PLAYING 才加载 m3u8。message 并显示在视频舞台和顶部状态栏。video.playbackRate 伪造 NVR 倍速。HikNvrPlaybackUiProperties、页面配置 DTO、页面创建请求 DTO;HikNvrPlaybackUiController;application.yml 增加 hik.playback.ui 固定配置;src/main/resources/static/playback.html;STARTING 轮询和 generation 重载覆盖了此前 VLC/HLS 首帧延迟及跳转旧切片问题;