Синхронизация HLS в прямом эфире между устройствами - PullRequest
2 голосов
/ 14 марта 2019

В настоящее время мы используем ExoPlayer для одного из наших приложений, которое очень похоже на приложение HQ Trivia, и мы используем HLS в качестве протокола потоковой передачи.

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

Мы заметили, что в текущей конфигурации бэкэнда задержка составляет от 6 до 10 секунд. Основываясь на этом факте, мы предположили, что было бы безопасно «заставить» игрока играть с большей задержкой (15 секунд, дальше от живого края), таким образом достигая одинаковой (постоянной) задержки на всех устройствах.

Мы используем тэг EXT-X-PROGRAM-DATE-TIME, чтобы получить серверное время текущего воспроизводимого контента, а также у нас есть мастер-часы с текущим временем (NTP). Мы постоянно сравниваем 2 такта, чтобы проверить текущую задержку. Мы приостанавливаем воспроизведение проигрывателя, пока он не достигнет желаемой задержки, а затем возобновляем воспроизведение.

Проблема с этим решением состоит в том, что задержка может ухудшиться (накапливая задержку) с течением времени, и у нас нет другого выбора, кроме перезапуска воспроизведения и повторения шагов, описанных выше, если задержка становится слишком большой (шаги по указанному порог). Перед перезапуском плеера мы также пытаемся немного увеличить скорость воспроизведения, пока она не достигнет указанной задержки.

Экземпляр exoPlayer настроен с помощью DefaultLoadControl, DefaultRenderersFactory, DefaultTrackSelector, а источник мультимедиа использует DefaultDataSourceFactory.

Конфигурация на стороне сервера выглядит следующим образом: cupertinoChunkDurationTarget: 2000 (по умолчанию: 10000) cupertinoMaxChunkCount: 31 (по умолчанию: 10) cupertinoPlaylistChunkCount: 15 (по умолчанию: 3)

Мой первый вопрос будет, если это вообще возможно с помощью протокола, такого как HLS? Почему игрок уходит, накапливая все больше и больше задержек? Есть ли лучшая настройка для экземпляра exoPlayer с учетом нашего конкретного варианта использования? Есть ли лучший способ добиться постоянной задержки воспроизведения на всех воспроизводимых устройствах? Насколько важны параметры на стороне сервера для достижения такого поведения?

Я был бы очень признателен за любую помощь, потому что я зашел в тупик. :)

Спасибо!

1 Ответ

0 голосов
/ 28 марта 2019

Единственное решение для этого обеспечивается:

https://netinsight.net/product/sye/

Их решение включает в себя синхронизацию с точностью до кадра без дрейфа и ABR с сохранением состояния. Это, вероятно, не может быть сделано с протоколами на основе http, поэтому их решение основано на UDP-транспорте.

...