MQTT-контракт плеера
Плеер для Android TV управляется по MQTT и туда же публикует состояние. Своего протокола нет — обычный брокер плюс этот контракт, поэтому координатором может быть любая система (например, умный дом ThinkingHome).
Префикс топиков — prism, {id} — идентификатор плеера (генерируется один раз при первом запуске). Пейлоады — JSON в UTF-8.
Плеер → брокер
| Топик | Назначение | Retain |
|---|---|---|
prism/player/{id}/info | статичная информация о плеере | да |
prism/player/{id}/state | текущее состояние и позиция | да |
prism/player/{id}/event | разовые события | нет |
// 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:
{"action":"open","url":"http://host/hls/abc/playlist.m3u8"}
{"action":"close"}
{"action":"refresh"} // немедленно перепубликовать info и stateАдрес хоста плеер не хранит: что играть, приходит абсолютным URL в команде, поэтому источников контента может быть несколько.
Как включить кино
- Координатор находит запись в библиотеке через
GET /api/mediaи берётstreamUrl, подставляя адрес нужного хоста. - Публикует
{"action":"open","url":"…"}в топик выбранного плеера. - Плеер играет и репортит
state.
«Следующая серия» вычисляется координатором: плеер библиотеки не знает и получает готовый URL.