Синхронизация прямых трансляций HLS на всех устройствах

В настоящее время мы используем 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 с учетом нашего конкретного варианта использования? Есть ли лучший способ добиться постоянной задержки воспроизведения на всех воспроизводящих устройствах? Насколько важны параметры на стороне сервера для достижения такого поведения?

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

Спасибо!


person Sergiu    schedule 14.03.2019    source источник


Ответы (1)


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

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

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

person user11269412    schedule 28.03.2019
comment
Вместо того, чтобы просто предоставить ссылку, не могли бы вы расширить актуальную информацию и объяснить ее в своем вопросе? - person C. Peck; 28.03.2019