WatchTogether
Модуль синхронизированного просмотра для Lampac. Работает одновременно как хранитель состояния и как тихий lparty-клиент: комната живёт в канале реле, а сервер незаметно подхватывает роль хоста, если создатель отключился.
Клиентский плагин основан на lparty.js (nrsua, levende) и полностью wire-совместим с его экосистемой — JustPlus Player, lparty-web и стоковый lparty.js подключаются к тем же комнатам без правок.
Как это работает
- Создание комнаты. Человек создаёт комнату в любом lparty-клиенте — его клиент открывает канал
wss://<lampac>/wt/c/lparty-r-<sha256(КОД|пароль)[0:24]>и является хостом. - Тень. Сервер видит адрес подключения и начинает пассивно слушать кадры канала: копирует url, метаданные, позицию, скорость и список участников. В списке зрителей он виден как
Lampac, но ничего не рассылает. - Подмена. Как только соединение хоста рвётся, сервер мгновенно шлёт кадр
hostи продолжает timeline с последнего хартбита (лаг ≤ 2с, пауза — точно). Попытки других клиентов перехватить хостство отклоняются повторнымhost=сервер. - Возврат. Создатель переподключился — сервер отдаёт ему роль и снова уходит в тень.
- GC. Пустые комнаты удаляются через
gc_empty_timeout_minutes, любые — черезgc_max_lifetime_hours.
HTTP (обзор)
| Маршрут | Описание |
|---|---|
GET /watchtogether.js |
Плагин для клиента Lampa (адаптированный lparty.js). |
GET /watch_together/ |
Веб-плеер для анонимных гостей (адаптированный lparty-web). Поддерживает ?room=<base64(КОД:пароль)> и ?relay=. |
WS /wt/c/{channel} |
LParty-совместимый релей: каналы, кадры join/leave/message, эхо с серверным временем. |
Скорость воспроизведения
Наши клиенты передают скорость поле sp в кадрах state/sync/act/hold/go и применяют её к playbackRate. Стоковые клиенты поле молча игнорируют — обратная совместимость не нарушается. Если автор JustPlus добавит поддержку sp, синхронизация заработает у него автоматически.
Конфигурация
Секция в init.conf: WatchTogether.
| Поле | Смысл |
|---|---|
enable |
Включение модуля (по умолчанию true). |
allow_anonymous |
Доступ к плагину /watchtogether.js и веб-плееру lparty-web без авторизации (по умолчанию true). |
relay_max_channels |
Лимит одновременных каналов реле (по умолчанию 500). |
relay_max_clients_per_channel |
Лимит участников одного канала (по умолчанию 32). |
gc_empty_timeout_minutes |
Удаление пустой комнаты через N минут (по умолчанию 30). |
gc_max_lifetime_hours |
Удаление любой комнаты через N часов (по умолчанию 12). |
Подключение клиентов
- Плагин Lampa:
/watchtogether.js— реле уже настроено на собственный сервер lampac. - JustPlus Player / lparty.js: в настройках клиента указать адрес реле
ws(s)://<адрес-lampac>/wt/c/. - Веб-гость: открыть
https://<lampac>/watch_together/?room=<invite-код>— ссылку формирует плагин.