离开对讲房间(AudioBridge leave)

验证状态:已源码核验、未联调;适用基线:源码归纳 @ 2026-09-14

用途与场景

主动离开 AudioBridge 房间(保留会话与句柄)。本页是 mqtt-janus-audiobridge-leave 的唯一操作正本。通道、transaction、中心转发公共口径见 会话生命周期正本

使用位置

页面/功能 角色或空间分支
对讲房间卸载/离开时发布 leave 并经收尾链销毁发布者 登录用户;已加入房间

端点

MQTT 发布 server/center-server/ptt/v1/forward/janus/to(回包按 transaction 首段 reply topic 回流)— 主动离开 AudioBridge 房间(保留会话与句柄)(janus 动词 leave)。

通道契约全量事实(直通白名单、消费方、转发与回包路由)见 MQTT 主题清单 · 静态 topic动态下行(物理桥与 transaction 回包路由);字段级契约见 yaml 详解 · ptt forward-janus-to;janus 转发链的业务语义见设备业务 · mqtt-bridge 设备消息链

请求报文 {janus:"message", session_id, handle_id, body:{request:"leave"}}

动线与完成判据

  • 业务完成 = left 插件事件;本地不设独立阶段 deadline(leave 不在 create/attach/join/webrtc 五阶段链内)。
  • 页面主动退出在 room.leave 完成后导航返回;无论成功与否都会返回(finally)。
  • 卸载兜底:captureJanusPublisher 用捕获的 transport client 发送 fire-and-forget leave(无回执等待,失败即失败)。

错误与边界

  • 未加入时 leave → 487 not joined(可重试集合之外的场景差异:Web 对 leave/destroy 的在途请求不因 plugin 终止事件而中断,isCleanupRequest 豁免)。
  • leave 之后会话仍存活;房间销毁(他人触发)会以 sessionTerminal(plugin: destroyed) 事件通知本端。
  • 中心丢弃无回执;本操作无自动重试包装(成功与否由 left 事件判定),Web 退出流程不因 leave 失败阻塞。

调用关系与资源清理

  • 时序:join 成功后任意时刻可 leave;离开后仍可重新 join(同一句柄)或走 destroy 收尾。
  • 其它成员的离开经 events 正本 participantLeft 推送。

已知缺口

Janus 插件对 leaving 字段与空房间行为源码不在本工作区;未联调。