ВойтиСоздать комнату
Парень в синем худи стоит в темноте, вокруг него светится голубое пламя

Как работает синхронизация плеера в AniDUO

Что происходит, когда кто-то в комнате жмёт паузу: общее состояние на сервере, сверка часов, догоняющее ускорение и ожидание перед стартом серии.

3 мин чтенияКак устроеноAniDUO

Общий плеер выглядит просто: нажал паузу, и она встала у всех. Внутри всё чуть хитрее, и это не маркетинговая магия, а пара скучных инженерных решений. Рассказываем, как оно устроено, без формул.

Главный принцип: правда живёт на сервере

У каждой комнаты одно состояние плеера, и хранит его сервер. Серия, позиция, играет видео или стоит. Браузер участника у себя ничего не решает, он только показывает то, что сказал сервер.

Когда вы нажимаете паузу, браузер не ставит видео на паузу сам. Он отправляет серверу просьбу: «поставь на паузу». Сервер проверяет, можно ли вам управлять плеером, меняет состояние комнаты и рассылает его всем, в том числе вам. Отсюда простое свойство: двое не могут поставить комнату в два разных состояния. Кто успел первым, того и правда.

Часы у всех разные

Сказать «видео на 12:40» мало, нужно ещё «на 12:40 в такой-то момент времени». А часы на компьютерах расходятся, иногда на секунды. Для совместного просмотра это пропасть.

Поэтому при входе в комнату браузер несколько раз подряд обменивается с сервером короткими сообщениями и засекает, сколько идёт ответ. Из пяти замеров берутся три лучших, по ним вычисляется разница между вашими часами и серверными. Потом сверка повторяется раз в 30 секунд, чтобы поправка не уплыла.

С этой поправкой любой браузер сам считает, на какой секунде серии комната находится прямо сейчас.

Отстал? Догоняем без рывков

Интернет у всех разный, видео иногда подгружается с задержкой. Плеер каждые полсекунды сравнивает, где он сам и где комната.

  • Разница меньше 0,3 секунды: ничего не делаем, на глаз её не заметить.
  • От 0,3 до 2 секунд: видео у отставшего играет на 5% быстрее, у убежавшего вперёд на 5% медленнее. Когда разрыв сжимается до 0,1 секунды, скорость возвращается в норму. Сам момент догонялки почти никто не замечает.
  • Больше 2 секунд: плавно уже не догнать, поэтому плеер просто перематывает к остальным.

Выходит, что медленный интернет у одного человека портит просмотр только ему, и то ненадолго. Остальные его не ждут.

Перед стартом комната ждёт всех

Когда включается новая серия, видео должно загрузиться у каждого. Если стартовать сразу, половина комнаты начнёт с чёрного экрана.

Поэтому комната сначала ждёт. На экране появляется «Ждём: …» со списком тех, у кого серия ещё грузится, и обратным отсчётом. Как только все готовы или время вышло, серия стартует у всех одновременно.

Что происходит, если связь отвалилась

Браузер пробует переподключиться сам: сначала через секунду, потом всё реже, но не реже раза в 30 секунд. После переподключения он спрашивает у сервера текущее состояние комнаты и встаёт туда, где все. Ничего нажимать не нужно.

Опоздавшие работают так же. Зашёл в комнату посреди серии, и плеер сразу ставит тебя на нужную секунду.

Опенинги, эндинги и следующая серия

AniLiberty размечает, где в серии опенинг и эндинг. На полосе перемотки эти куски подсвечены, а пока идёт опенинг, в плеере есть кнопка «Пропустить опенинг». Нажал её один, пропустили все: это такая же команда комнате, как пауза.

Когда серия заканчивается, следующая включается автоматически, и в ленте комнаты появляется запись об этом.

Кто вообще может жать кнопки

По умолчанию все. Владелец комнаты может переключить режим: управлять плеером будет только он или выбранные участники. Проверка идёт на сервере, поэтому обойти её, покопавшись в браузере, не получится.

Если хотите посмотреть, как это выглядит вживую, на главной есть демо с двумя плеерами. Нажмите паузу в одном и посмотрите на второй.

Позовите друзей и включайте серию

Бесплатно, до 10 человек в комнате.

Создать комнату

Ещё по теме

Девушка с синими волосами в большой чёрной шляпе улыбается на фоне неба

2 мин чтения

AniDUO: что умеет и как начать

Коротко про AniDUO: общий плеер для аниме, комнаты до 10 человек, чат, достижения и вход через Яндекс ID. И как собрать первую комнату за пару минут.