流程状态:整合票 20 依据已核验正本合并的流程结构,未联调;设备 webrtc/v1 命令族与 Janus 媒体面正本均带具名缺口,各步骤以其链接的正本页为准。

实时监看与直播

串起从设备列表到直播画面的主路径:HTTP 预载设备/机构数据 → IoT 在线快照轮询 → 设备探测 → P2P 或 Janus(SFU)分支 → 清理。直播链路的发布成功、信令成功与媒体就绪是三个状态,App 状态机不得合并。

前置条件

主路径

  1. 在线与类别快照:以 list-category-info 按设备 clientId 前缀轮询在线状态与缓存类别(忙/闲轮询周期见正本);快照来自缓存,空对象不代表设备离线。
  2. 选择设备并探测:播放器用同设备 topic 的 ping / media 三命令(该正本标「存在关键缺口」:设备固件是最终消费者,应答权威 schema 缺证)决定走 P2P 还是 SFU 分支,以及「被占用/等待建房」等状态。
  3. ICE 服务器:经 list-ice-server(监看正本)获取 ICE 配置(wire 契约与对讲域共用,正本在监看域)。
  4. P2P 分支:按 P2P 信令(call/sdp/candidate/bye 合页) 与对端建连;信令同为设备 topic 命令族,缺口口径同探测页。
  5. SFU(Janus)分支
    1. 创建 Janus 会话并 keepalive(transaction 公共口径见该正本);
    2. attach VideoRoomjoinstart,trickle 候选见 trickle 正本
    3. 对设备端的 play/idr 控制用 Janus 直播设备媒体控制
    4. 管理端查询用 admin handle_info,其目标是设备发布者句柄,不是 Web 自身会话。
  6. 代报与状态刷新:直播中的设备由 Web 经 report-category-info 代报类别状态;Web 代报会把设备标记在线(在线统计口径副作用,见正本)。
  7. 主动事件:Janus 下行无请求事件按各正本订阅分发(attached 回显、参与者变化等);事件字段全集属 Janus 服务器缺证项。

失败与恢复

  • 传输/信令/媒体分层:MQTT publish 成功(QoS 1)≠ 中心转发成功 ≠ Janus action 成功 ≠ 媒体可用;各层判据见各正本「完成判据」。
  • Janus 失败出口(transport/core/plugin/timeout/hangup/detached/destroyed)的恢复或终止路径在会话与 join 正本中记录;Web 直播链不发送 destroy,卸载只 leave,会话由 Janus 服务端超时回收——App 是否复用该策略需自行决定。
  • 设备无应答/离线:探测轮询持续,播放器停留在状态机等待位;无中心侧超时代偿。
  • 断线重连后需重建 MQTT 订阅与 Janus 会话/handle 状态(clean=true 无服务端恢复,MQTT 会话正本)。

收尾

  • 离开页面:leave VideoRoom(leave 正本)、停止本地媒体轨道、取消事件监听;MQTT 连接随布局卸载断开。
  • 某一步超时不能默认对端资源已释放(设备侧与 Janus 侧资源回收均缺现场证据)。
  • 具名缺口汇总(设备固件九操作、Janus 服务器实现、Broker ACL/物理桥部署)见未发布正本与保留项的缺口统计小节。