Два архитектурных подхода к совместному просмотру видео и чем они отличаются на практике
Инструменты для совместного просмотра видео строятся на двух принципиально разных архитектурах. Разберу оба, с плюсами и ограничениями каждого.
Подход 1: серверный relay
Watch2Gether (w2g.tv), WParty (wparty.net), vmeste.tv. Пользователь отправляет ссылку на видео, сервер его загружает или проксирует, раздаёт участникам комнаты через собственный плеер. Синхронизация на стороне сервера: он контролирует playback state для всех клиентов.
Плюсы очевидные: работает в любом браузере, ставить ничего не нужно, одна ссылка на комнату решает вопрос. Порог входа минимальный.
Минусы тоже. Видео проходит через инфраструктуру сервиса, перекодируется. На потоке 1080p с Кинопоиска получишь что-то хуже на выходе. Плюс юридическая зона: проксирование контента с платных платформ нарушает условия использования большинства из них. Поэтому relay-сервисы работают в основном с YouTube, Vimeo, частично с RuTube и ВК Видео. Кинопоиск, Иви, Okko ни один relay-сервис напрямую не поддерживает.
Подход 2: state sync на клиенте
Teleparty (teleparty.com), TandemParty (tandemparty.com). Браузерное расширение внедряется в страницу через content script, находит video element, подписывается на события (play, pause, seeked, ratechange) и транслирует их участникам через WebSocket.
Видеопоток не затрагивается. Каждый участник грузит контент напрямую с CDN платформы в нативном качестве. Расширение только рассылает команды управления.
Сложность в адаптерах. Каждая платформа использует свой плеер с разными обёртками, разными событиями, разными способами управления воспроизведением. Кинопоиск, YouTube, RuTube, ВК Видео, Иви, Okko, все по-разному. Расширение должно содержать отдельный адаптер под каждую, который знает как найти video element, как подписаться на события, как программно управлять плеером.
Teleparty покрывает западные платформы: Netflix, HBO Max, Disney+, Hulu. TandemParty поддерживает 15 платформ, включая российские (Кинопоиск, Иви, Okko, Wink, Premier, KION, Start, Амедиатека) и западные (Netflix, Prime Video, HBO Max, Crunchyroll). WebSocket-сервер у TandemParty на Rust.
Минус state sync подхода: требуется расширение. Без установки не работает, а это дополнительный порог входа. Плюс расширение привязано к Chromium, Firefox и Safari остаются за бортом.
По факту, для синхронного просмотра с сохранением качества state sync выигрывает. Relay проще в онбординге, но проигрывает в качестве картинки и в покрытии платформ.