互动白板产品概览
产品定位、架构、房间模型、实时通道(LiveKit)与服务端持久化的分工。
互动白板(Interactive Whiteboard)是 ni-meet 的产品线之一:把白板房间、场景与笔迹内容放在控制面持久化,再用实时数据通道把增量同步给房间内的所有成员。它不依赖白板专用的媒体服务器,房间里的语音、视频仍由 RTC 频道承载。
产品定位
- 可持久化:每个房间的场景、笔迹、图片和视口写入控制面,服务重启前一直可读;关闭房间后仍可导出快照与回放。
- 可回放:所有变更按序号写入操作日志,回放接口按时间偏移返回操作帧,播放器可以暂停、定位和结束。
- 可鉴权:项目凭证用于服务端调用;房间 Token 绑定到单个房间与角色(
admin/writer/reader),有效期可控。 - 可观测:房间版本号随每次变更递增,操作序号单调递增,便于客户端对账和去重。
架构
浏览器 / 移动端 WebView
│ ① REST(场景与内容持久化)
│ ② LiveKit data channel(topic = whiteboard,低延迟广播)
▼
ni-meet 控制面 ── 白板服务 ── 房间 / 场景 / 笔迹 / 操作日志
│
└── 快照导出(JSON / SVG)与回放时间线第 ① 条路径是权威数据源:晚加入的成员、回放和导出都从控制面读取。第 ② 条路径只负责实时性,消息丢失时由下一次 REST 同步或状态刷新补齐。
能力清单
| 能力 | 说明 |
|---|---|
| 房间生命周期 | 创建、列表、详情、封禁/解禁、永久关闭(关闭后只读) |
| 场景(页面) | 场景路径 /目录/页面、背景图、新增与切换 |
| 场景内容 | 笔迹(画笔、橡皮、矩形、椭圆、图形、激光笔等工具)、图片、视口 |
| 撤销/重做 | 按成员隔离,服务端保留完整操作日志 |
| 快照/导出 | 完整 JSON 快照(含操作日志)与单场景 SVG |
| 回放 | 按 from / to 时间窗返回操作帧与偏移 |
| 房间 Token | NETLESSROOM_*,角色与有效期可控;项目 Token 为 NETLESSSDK_* |
与 RTC 的关系
白板房间与 RTC 频道是两个独立概念:白板房间有自己的 UUID,可以绑定到任意频道名或课程。典型用法是先用 RTC 加入语音/视频频道,再用白板 Token 加入白板房间,两者都通过同一套项目凭证在服务端签发。
当前边界
- 服务端不提供文档转换(PPT/PDF 转图片):背景图由调用方上传后以 URL 形式写入场景。
- 场景删除、页面排序不在服务端接口范围内;客户端仍可清空内容或切换页面。
- 操作日志按房间保留最近 10000 条,超出后最早的记录不再进入回放。
- 白板服务使用与平台一致的存储抽象;默认内存实现重启即清空,生产部署需替换为持久化存储。
历史版本
- 版本 0.9.0 2026-10-20 — Initial whiteboard overview (pre-GA).