验证状态:已源码核验、未联调;适用基线:源码归纳 @ 2026-09-14
通过对讲房间 Janus 客户端在建立 WebRTC 连接前获取目标 SFU 的 ICE(STUN/TURN)服务器列表。本页是 mqtt-createaudiobridgejanusclient-server-center-server-iot-v1-list-ice-server-4b45dc28 的唯一操作正本,覆盖对讲房间链路对 server/center-server/iot/v1/list-ice-server 的请求与应答契约。实时监看(直播)链路对同一 topic 的调用属监看域 operationId,其正本归票 13,App 集成时应以目标链路正本为准(wire 契约相同)。
| 页面/功能 | 角色或空间分支 |
|---|---|
| 对讲房间连接链路加载 ICE 配置(与 create/attach/join 并行发起) | 登录用户的 MQTT 连接 |
| 连接尝试内调用(携带 AbortController;localStorage stale-while-revalidate 缓存) | 同上 |
MQTT 请求 server/center-server/iot/v1/list-ice-server(应答按一次性 reply topic 回流)— 建房前获取目标 SFU 的 ICE(STUN/TURN)服务器列表。
主题契约全量事实(方向、消费方、QoS、payload 归档口径)见 MQTT 主题清单 · 静态 topic与yaml 详解 · list-ice-server;该通道的业务语义(iot v1 信封、按请求方设备号解析)见设备业务 · mqtt-bridge 设备消息链。应答中每个前缀条目携带同一份按请求方设备号解析的 ICE 配置(并非按前缀分配,源码归纳)。
| 层级 | 判据 |
|---|---|
| 发布完成 | publishAsync 成功;失败 reject 请求 |
| 应答到达 | 一次性 reply topic 收到通过 zod 校验的 status=200 应答 |
| 超时 | 请求本身无内置超时;由连接状态机的 ice 阶段 8 秒 deadline 兜底(SETUP_STAGE_DEADLINE_MS);AbortSignal 在连接任务被替换/卸载时中止(createAbortError) |
| 缓存命中 | localStorage 键 talkgroup.ice-servers.{username}.{janusNo}(同一 zod schema 校验)命中时立即使用并并行重查刷新,无 TTL |
params 缺失/非数组/空数组 → 业务拒绝应答(经 status/error 回传)。classifyAudiobridgeFailure 归 non-retryable local failure)。wireId,不跨连接复用;MQTT 断线重连后旧在途请求随连接任务作废。