查询对讲房间 ICE 服务器(list-ice-server)

验证状态:已源码核验、未联调;适用基线:源码归纳 @ 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 主题清单 · 静态 topicyaml 详解 · 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 回传)。
  • zod 不合规应答 ≠ 传输失败:Web 按"无效 ICE 配置"处理并重试/进入恢复状态机(classifyAudiobridgeFailure 归 non-retryable local failure)。
  • 一次性 reply topic 含 wireId,不跨连接复用;MQTT 断线重连后旧在途请求随连接任务作废。

调用关系与资源清理

  • 前置于 configure 正本 的 RTCPeerConnection 建立;与 create/attach/join 并行。
  • 清理:abort listener 与 emitter 监听在 settle/cleanup 中解除。
  • 直播链路同 topic 操作归票 13 正本;集成时链接对应正本。

已知缺口

  1. ICE 值的取值已核验到默认配置入口;各维度实际配置值属部署数据,未核验。
  2. Broker ACL、TURN 凭据分发时效未做部署核验;未执行真实联调。