验证状态:已源码核验、未联调;Web 发送、应答消费、中心转发已双侧核验;
attached事件是否回显 transaction 依赖 Janus 实现,缺证。 适用基线:源码归纳 @ 2026-09-14
以 subscriber 身份加入设备所在的 VideoRoom 房间并订阅其发布流(feed)。成功的 attached 插件事件携带 Janus 的 SDP offer(jsep),是整条直播链路媒体协商的起点。公共口径见 会话正本。
| 页面/功能 | 角色或空间分支 |
|---|---|
| SFU 直播组件 attach 成功回调内发布 join | 登录用户;SFU 分支,room/feed 来自设备 pong |
同组件消费 join ack 与 attached 事件 |
同上 |
对应 inventory operationId:mqtt-janusattachresultfn-server-center-server-iot-v1-forward-janus-to-a21c10e6。
MQTT 发布 server/center-server/iot/v1/forward/janus/to(回包按 transaction 首段 reply topic 回流)— join 请求,以订阅者身份加入 VideoRoom 房间并换取 SDP offer。
通道契约全量事实见 MQTT 主题清单 · 静态 topic与动态下行;字段级契约见 yaml 详解 · forward-janus-to;janus 转发链业务语义见设备业务 · mqtt-bridge 设备消息链。请求报文 {janus:"message", body:{request:"join", ptype:"subscriber", room, streams:[{feed}]}, handle_id, transaction, session_id},transaction suffix 为 message-join(注意 start 正本 复用同一 suffix);room/feed 来自设备 pong(room=0 时播放器不进 SFU 分支)。
ack;业务完成 = attached 事件(SDP 到达并计时 receivedSdpTime)。,message-join, 的回包里识别 attached——即 Web 期望该事件回显原 transaction;该回显行为属 Janus 实现(缺证),若事件不带 transaction,中心虽能按 session 归还,Web 也不会进入 SDP 分支,最终触发 15 秒无 SDP 重试。retryConnection。ack 不是完成;attached 未到前页面显示"Waiting for janus response sdp"计时。useAsyncEffect;设备侧起播配套见 play/idr 正本。attached 事件的 transaction 回显、jsep 结构、失败错误码全集由 Janus 插件/核心实现决定,源码不在本工作区;本页记录的是 Web 期望与消费逻辑。streams:[{feed}] 的 feed 语义(pong.feed)以设备固件为源(缺证)。