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