Достижение синхронизации в приложении группового видео - PullRequest
0 голосов
/ 01 августа 2020

Я пытаюсь создать приложение ap, такое как Netflix Party, где пользователи могут присоединиться к комнате, чтобы вместе смотреть видео. В своей голове я до некоторой степени использовал веб-сокеты в качестве основного способа связи между сервером и клиентами, и мне нужно знать, иду ли я в правильном направлении.

Требования:

  1. В комнате может быть mov ie, к которому люди могут присоединиться и смотреть вместе
  2. Все в комнате могут воспроизводить / приостанавливать видео
  3. Каждый действие зрителя должно быть синхронизировано с другими зрителями, например, если кто-то приостанавливает видео, видео всех остальных должно быть приостановлено
  4. Каждый раз, когда новый зритель присоединяется к комнате, он / она должны начать смотреть видео именно там, где mov ie находится в данный момент (воспроизведение или пауза и время)

Мои идеи на данный момент:

  • Создание объекта Room для каждой созданной комнаты
  • Сущность комнаты будет иметь что-то вроде закладки и статус mov ie (ВОСПРОИЗВЕДЕНИЕ / ПАУЗА / ЗАВЕРШЕНО)
  • Любой, кто присоединяется к комнате, будет запрашивать у Сервера закладку и статус t he mov ie.

Теперь, чтобы мой сервер имел самую последнюю информацию о воспроизводимом видео, мне нужен способ информировать его через определенные промежутки времени.

Если мое мнение пока верно, мне нужны в основном две вещи:

  1. Способ информирования моего сервера о закладке (последней просмотренной), чтобы всякий раз, когда кто-то подключается, зрителю предоставляется самое последнее состояние из mov ie.
  2. Способ для сервера синхронизировать c любое действие, выполняемое зрителем, со всеми другими зрителями

Для 1, я думаю, что каждый клиент должен отправлять обновления о том, где они находятся в mov ie с определенным интервалом, но я не знаю, как сервер будет обрабатывать 100 запросов в секунду для одной комнаты и, что наиболее важно, будет ли это масштабируемое решение.

  • Должны ли все клиенты отправлять свои обновления или один из клиентов должен быть обязан обновлять сервер о том, где он находится в mov ie?
  • Если последнее, то как мы согласовать задержку между тем, кто отправляет обновление, и другим зрителем, который может отключиться на секунду или две?
  • Самое главное, как мне вставить все эти обновления в БД, поддерживая согласованность?

Для 2, я думаю, клиент отправит событие на сервер, затем сервер обновит базу данных и затем передаст событие всем другим клиентам. Но тогда

  • Что происходит, когда Viewer 1 отправляет сигнал на паузу, где t является моментом времени в mov ie, а Viewer 2 находится в t-2? Должен ли Viewer 2 перейти к t и установить себя там, или он должен приостановить себя, где бы он ни находился?

Нужна ли мне для этого база данных с большим объемом записи? Следует ли мне использовать передачу сообщений для обновления базы данных об изменениях в закладках и статусе mov ie?

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

Спасибо за ваше время.

...