跳转到内容

WebSocket(/ws/v1)

地址为 ws://<IP>:<端口>/ws/v1。无需鉴权,客户端不发送任何消息。

{
"type": "snapshot",
"source": { "type": "vmix", "state": "ready", "error": null },
"devices": [{ "id": "k3m9x2qa", "name": "Camera 1", "program": true, "preview": false }]
}
{ "type": "heartbeat" }
  • 连接建立后,立即收到一次 snapshot。
  • 发生任何变化(Tally、机位增删改、切换台状态)时,都会收到完整的 snapshot;与上一次完全相同时不发送。
  • 每 2 秒发送一次 heartbeat。
  • 连接的发送缓冲超过上限时,服务端会断开该连接;客户端重连后会收到最新快照。
  • 6 秒内未收到任何消息:显示 Unknown,断开并重连。
  • 断开后每 2 秒重连一次;App 或页面回到前台时立即重连。重连后收到新的完整快照,直接替换旧状态。
  • 快照中找不到本机位 ID 时,显示「机位已删除」。
let ws, watchdog
function connect() {
ws = new WebSocket(`${base.replace(/^http/, 'ws')}/ws/v1`)
const alive = () => {
clearTimeout(watchdog)
watchdog = setTimeout(lost, 6000)
}
const lost = () => {
ws.onmessage = ws.onclose = null
ws.close()
clearTimeout(watchdog)
show('unknown')
setTimeout(connect, 2000)
}
alive()
ws.onmessage = (event) => {
alive()
const message = JSON.parse(event.data)
if (message.type === 'snapshot') show(tallyOf(message, deviceId))
}
ws.onclose = lost
}
connect()

tallyOf 的实现见显示规则。