探测设备直播状态与媒体配置(ping / media)

验证状态:存在关键缺口,不可作为完整契约发布。Web 发布、应答消费与轮询状态机已源码核验;设备固件是 device/{deviceNo}/webrtc/v1 的最终消费者,其源码不在本工作区,pong/media 应答的权威字段、错误形态与未知输入行为缺证。 适用基线:源码归纳 @ 2026-09-14

用途与场景

直播播放器(Player1)在挂载播放组件前,用同一设备 topic 上的三个命令探测设备 WebRTC 状态机与媒体配置:ping 换取设备直播状态快照(pong),media 读取当前媒体配置,mediaparams 修改音量等媒体项。三者决定播放器走 P2P 还是 SFU(Janus)分支,以及是否显示"被占用/等待建房"等状态。本页是这三个操作的唯一操作正本;同 topic 的 P2P 信令族见 P2P 信令,Janus 直播的 play/idr 控制见 Janus 直播设备媒体控制

使用位置

页面/功能 角色或空间分支
播放器发布 sub:"ping" 探测 登录用户;单直播/多直播/播放页中挂载播放器
播放器发布 sub:"media"(无 params) 同上
播放器发布 sub:"media"params(由 uiEvent.device.setMedia 触发) 同上

对应 inventory operationId:mqtt-player1-device-var-webrtc-v1-01377122(ping)、mqtt-player1-device-var-webrtc-v1-b91d8cc4(media 读取)、mqtt-player1-device-var-webrtc-v1-be2f79bc(media 修改)。

端点

MQTT 发布 device/{deviceNo}/webrtc/v1(Web → Broker → 设备直发,中心网关不消费;QoS/retain 等 wire 细节见业务页)— ping(直播状态快照)与 media(媒体配置读/写)命令。

设备直连 webrtc 通道属中心不消费的接入面(网关默认订阅清单无 device/+/webrtc/#,见服务端订阅面);通道业务语义见设备业务 · mqtt-bridge 设备消息链。载荷形态 {sub, id, reply[, params]}media 修改时 params 为媒体配置对象(Web 触发源如 {audio:{speaker}},权威字段集属设备契约),应答回流到 …/components/player-1/{deviceNo}/webrtc

动线与完成判据

层级 判据
发布完成 publishAsync Promise 成功;仅代表 Broker 受理,不代表设备收到或执行
状态确认 reply topic 收到 sub:"pong" 应答,data.status 可解析
媒体确认 sub:"media" 应答写入 deviceMediaMap
超时 无内置请求超时;以轮询间隔补偿——pong 为空时 1 秒一问;pong.status="p2p" 被占用 500ms、SFU 未建房 1 秒、SFU 已建房 5 秒;media 在 P2P 未取到时 1 秒、SFU 未取到时 90 秒

pong.status="p2p"id 非空且非本会话 → 判"被其他端占用";id 为空 → 过渡态,页面以 500ms 激进 ping 推动恢复。设备按 pong 结果分派:idle 或本会话 P2P → P2P 信令sfuJanus 直播会话room/feed/session_id/handle_id 来自 pong)。

错误与边界

  • 发布失败会被 waitFor/Promise 链静默丢弃,依赖轮询与 MQTT 自动重连(clean session)补偿。
  • 设备不回 pong 时播放器停留在"等待设备响应 pong"文案,无失败终态。
  • pong 是瞬时快照,传输不推出状态新鲜。
  • 播放器的直播密码门(USER_CFG_S.KeyLockEnable/AdminPasswd 比对)是前端控件限制,不是设备或后端硬约束。

调用关系与资源清理

  • pingmedia 读取在 deviceWebrtcReplyType/deviceNo 变化时各触发一次;三个函数均 useThrottleFn({wait:500})
  • retryConnection 仅清空 pong/pingTime 触发重探,由 Janus/P2P 组件在连接失败 15 秒后回调。
  • 无需显式取消订阅;应答 topic 随全局订阅生命周期。

已知缺口

  1. 设备固件是最终消费者:ping/media 的设备侧处理、pong/media 应答权威 schema、status/room/feed/session_id/handle_id 的真实类型与语义,均以设备固件或协议文档为准,本工作区缺证。
  2. Broker ACL(device/# 发布、user/.../# 订阅)与部署环境订阅清单一致性待部署核验。
  3. 未执行真实 Broker/设备联调。