直播链路获取 ICE 服务器(list-ice-server)

验证状态:已源码核验、未联调;Web 与中心消费者双侧核验。 适用基线:源码归纳 @ 2026-09-14

用途与场景

直播页(单直播/多直播/回放共享的 WebRTC 链路)批量获取每台设备 WebRTC 客户端的 ICE(STUN/TURN)服务器配置,写入 iceServerList 供 P2P 与 Janus 两条直播链路建立 RTCPeerConnection 使用。本页是实时监看域 operationId 的唯一操作正本,覆盖直播链路的请求/轮询/消费差异;topic 的 wire 应答契约(iceServers 结构与按请求方设备号解析)与对讲链路共用,正本见 对讲 list-ice-server

使用位置

页面/功能 角色或空间分支
单直播页设备前缀查询 登录用户;单直播页
多直播页设备前缀查询 登录用户;多直播页
回放页设备前缀查询(同参数构造) 登录用户;回放页
消费:getIceServers(prefix) → P2P/Janus 组件与 ICE 下发共享 Hook

对应 inventory operationId:mqtt-list-ice-server-server-center-server-iot-v1-list-ice-server-3bbd408b

端点

MQTT 请求 server/center-server/iot/v1/list-ice-server(应答按一次性 reply topic 回流)— 直播页批量获取每台设备 WebRTC 客户端的 ICE(STUN/TURN)服务器配置。

主题契约全量事实(方向、消费方、payload 归档口径)见 MQTT 主题清单 · 静态 topicyaml 详解 · list-ice-server;该通道的业务语义(iot v1 信封、按请求方设备号解析)见设备业务 · mqtt-bridge 设备消息链。载荷形态 {id, reply, params:{mqttClientIdPrefixes}}——不带 replyNumberMax/replyInterval,即服务端默认单次应答;wire 应答契约(iceServers 结构)与对讲链路完全一致,见对讲正本的记录。

刷新语义:无固定轮询——isIdle 恒真使 backoff 停摆(单直播 poll:{busyInterval:3000, isIdle:=>true}),设备列表变化时重查;无本地持久缓存(与对讲链路的 localStorage 缓存不同)。

动线与完成判据

层级 判据
发布完成 publishAsync Promise 成功
应答到达 应答 topic 收到 status=200data 数组可解析;iceServers 结构校验属对讲链路 zod 逻辑,直播链路不校验、直接存表
超时 请求无内置超时;设备列表变化或页面重进触发重查

错误与边界

  • 中心业务拒绝(params 缺失/非数组/空)与技术失败形态见对讲正本·错误与边界
  • 直播链路不校验 iceServers 内容:异常回包会原样进入 store,组件侧表现为 iceServers 为空/畸形——RTCPeerConnection 构造行为由浏览器决定(Web 未做防御)。
  • TURN 凭据经 Broker 明文下发到每台设备(webrtc/deliver 链),凭据分发时效与作用域属部署核验项。

调用关系与资源清理

已知缺口

  1. ICE 取值与 iceServers 权威 schema 已在对讲正本核验,但实际部署配置值未核验。
  2. 直播链路无内容校验的容错缺口(见错误与边界)待后续版本收敛。
  3. Broker ACL 待部署核验;未执行真实联调。