Skip to content

MQTT-контракт плеера

Плеер для Android TV управляется по MQTT и туда же публикует состояние. Своего протокола нет — обычный брокер плюс этот контракт, поэтому координатором может быть любая система (например, умный дом ThinkingHome).

Префикс топиков — prism, {id} — идентификатор плеера (генерируется один раз при первом запуске). Пейлоады — JSON в UTF-8.

Плеер → брокер

ТопикНазначениеRetain
prism/player/{id}/infoстатичная информация о плеереда
prism/player/{id}/stateтекущее состояние и позицияда
prism/player/{id}/eventразовые событиянет
jsonc
// info
{"name":"Гостиная","capabilities":["open","close","refresh"]}

// state
{"status":"playing",           // idle | buffering | playing | paused | ended
 "url":"http://host/hls/abc/playlist.m3u8","positionSec":123.4,"durationSec":2555.1}

info и state публикуются с retain, поэтому координатор, подключившийся позже, сразу видит, кто есть в сети и что играет. Обнаружение плееров — подписка на prism/player/+/info и prism/player/+/state.

Брокер → плеер

Команды публикуются в prism/player/{id}/cmd:

jsonc
{"action":"open","url":"http://host/hls/abc/playlist.m3u8"}
{"action":"close"}
{"action":"refresh"}   // немедленно перепубликовать info и state

Адрес хоста плеер не хранит: что играть, приходит абсолютным URL в команде, поэтому источников контента может быть несколько.

Как включить кино

  1. Координатор находит запись в библиотеке через GET /api/media и берёт streamUrl, подставляя адрес нужного хоста.
  2. Публикует {"action":"open","url":"…"} в топик выбранного плеера.
  3. Плеер играет и репортит state.

«Следующая серия» вычисляется координатором: плеер библиотеки не знает и получает готовый URL.

Опубликовано под лицензией MIT