Files
lampac/mods/WatchTogether/README.md
T

5.4 KiB

WatchTogether

Модуль синхронизированного просмотра для Lampac. Работает одновременно как хранитель состояния и как тихий lparty-клиент: комната живёт в канале реле, а сервер незаметно подхватывает роль хоста, если создатель отключился.

Клиентский плагин основан на lparty.js (nrsua, levende) и полностью wire-совместим с его экосистемой — JustPlus Player, lparty-web и стоковый lparty.js подключаются к тем же комнатам без правок.

Как это работает

  1. Создание комнаты. Человек создаёт комнату в любом lparty-клиенте — его клиент открывает канал wss://<lampac>/wt/c/lparty-r-<sha256(КОД|пароль)[0:24]> и является хостом.
  2. Тень. Сервер видит адрес подключения и начинает пассивно слушать кадры канала: копирует url, метаданные, позицию, скорость и список участников. В списке зрителей он виден как Lampac, но ничего не рассылает.
  3. Подмена. Как только соединение хоста рвётся, сервер мгновенно шлёт кадр host и продолжает timeline с последнего хартбита (лаг ≤ 2с, пауза — точно). Попытки других клиентов перехватить хостство отклоняются повторным host=сервер.
  4. Возврат. Создатель переподключился — сервер отдаёт ему роль и снова уходит в тень.
  5. 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-код> — ссылку формирует плагин.