创建并保活 Janus 直播会话(create / keepalive)

验证状态:已源码核验、未联调;Web 发送、中心转发与回包路由已双侧核验;Janus 服务器行为源码不在本工作区。 适用基线:源码归纳 @ 2026-09-14

用途与场景

SFU(Janus)直播的第一步:Web 向中心 Janus 转发通道发送 create 建立 Janus 会话,随后每 3 秒 keepalive 保活。本页是这两个操作的唯一操作正本,也是 live-view Janus 家族(attach / join / start / trickle / leave / handle_info)的公共口径正本——家族各页只列差异。中心对 Normal/Admin 通道的转发边界总口径见Janus 信令边界

使用位置

页面/功能 角色或空间分支
SFU 直播组件挂载即发 create;会话/句柄建立后周期 keepalive 登录用户;播放器分派到 SFU 分支(pong.room>0
同组件 同上;会话已建立

对应 inventory operationId:mqtt-januscreatefn-server-center-server-iot-v1-forward-janus-to-3d4f75c6(create)、mqtt-webrtclivejanus1-server-center-server-iot-v1-forward-janus-to-9b02ac8f(keepalive)。

端点

MQTT 发布 server/center-server/iot/v1/forward/janus/to(回包按 transaction 首段 reply topic 回流;Admin 变体 …/forward/janus/admin/tohandle_info 使用)— create / keepalive 两个 Janus 直播会话生命周期请求,中心原文转发到物理 Janus。

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

外层 wire 载荷为 {janusNo, transaction, ...janus 报文}(与对讲域同构但 transaction 拼形不同);transaction 形如 {replyTopic},{deviceNo},{action},{YYYYMMDDHHmmssSSS}(action ∈ createattachmessage-jointricklekeepaliveleavehandle-info),reply topic 为 user/{username}/web/{sessionId}/components/webrtc-live-janus-1/{deviceNo}/webrtc,routeId(第 2 段 deviceNo)供中心解析目标 Janus 节点(解析策略属中心内部,旧设备形 transaction 的回包落点为 device/{deviceNo}/webrtc/janus-from,见 yaml 详解)。两请求报文:create {janus:"create"}、keepalive {janus:"keepalive", session_id}(Web 不解析 keepalive 应答,仅靠周期维持)。QoS/retain 等 wire 细节见业务页。

动线与完成判据

  • create 成功 = 回包 topic 收到 janus==="success"data.id 可用;非 success 的 janus 值仅记入状态文案。
  • 无请求级超时:中心或 Janus 无回执时 Web 不会单请求超时;整体以 15 秒无 SDP 触发 retryConnection与连接失败 15 秒重试兜底,重试通过播放器重探 pong 重建整链。
  • keepalive 停止条件:组件卸载(useInterval 随生命周期停止);Web 不发送 destroy,会话由 Janus 服务端超时回收——超时时长属 Janus 实现(缺证)。

错误与边界

  • 中心三类静默丢弃:transaction 非法(缺段/回环 topic/非 JSON object)、reply 自地址、janusNo 解析为空——均无 Web 回执,只能等 15 秒重试。
  • data.id 缺失或非 success 时 Web 停留在状态文案,不自动重发 create(重试由上层重探驱动)。
  • keepalive 周期 3 秒是 Web 常量;Janus 会话超时阈值未知,不排除保活周期不足以续期的风险(缺证)。

调用关系与资源清理

  • 家族时序:createattachjoinstart(与 trickle 交织)→ leavehandle_info 与 keepalive 并行周期执行。
  • 设备侧配套命令见 play/idr 正本
  • 会话无显式 destroy:leave 只离房,会话由服务端超时回收;路由缓存绑定随中心缓存策略过期。

已知缺口

  1. Janus 服务器实现缺证:create/keepalive 的核心行为、会话超时、error 应答形态与错误码全集源码不在本工作区;本页只记录 Web 成功判据与中心转发边界,不宣称媒体可用。
  2. 设备表/数据字典的 janusNo 配置值属部署数据,未核验;多 Janus 节点路由(非 janus-1)未联调。
  3. Broker ACL、中心路由缓存 TTL 对断线重连后旧会话回包的影响未做部署核验。