验证状态:已源码核验、未联调;Web 发送与中心转发已双侧核验;Janus 服务器行为源码不在本工作区。 适用基线:源码归纳 @ 2026-09-14
Web 收到 Janus 的 SDP offer(join 正本)后,生成 answer 并通过 start 请求回传,完成订阅方向媒体协商。公共口径见 会话正本。
| 页面/功能 | 角色或空间分支 |
|---|---|
SFU 直播组件在 setRemoteDescription/createAnswer 成功后经串行队列发布 start |
登录用户;SDP 已到达且 ICE 配置非空 |
对应 inventory operationId:mqtt-janusmessagestartfn-server-center-server-iot-v1-forward-janus-to-4e8d1f68。
MQTT 发布 server/center-server/iot/v1/forward/janus/to(回包按 transaction 首段 reply topic 回流)— start 请求,回传 Web SDP answer 完成订阅方向媒体协商。
通道契约全量事实见 MQTT 主题清单 · 静态 topic与动态下行;字段级契约见 yaml 详解 · forward-janus-to;janus 转发链业务语义见设备业务 · mqtt-bridge 设备消息链。请求报文 {janus:"message", body:{request:"start"}, jsep:<answer>, handle_id, transaction, session_id};transaction suffix 复用 message-join(Web 未用独立后缀,识别时两者不可区分)。发送顺序:setRemoteDescription(offer) → createAnswer → 发布 start → setLocalDescription(answer)。
publishAsync 成功;媒体就绪 = connectionState==="connected"——Web 未注册 start 应答处理,协商成功以连接状态为准。setRemoteDescription/createAnswer/setLocalDescription 的异常按阶段记状态文案,整体失败由 15 秒连接状态重试兜底。message-join:回包若带同 suffix transaction,Web 的 join/start 分支无法区分(当前逻辑无影响——start 无应答消费,但 App 扩展时应注意)。connected → idr。Janus 对 start 的应答/失败语义、answer 校验行为源码不在本工作区;未联调。