Расширьте буферизацию живого потока DASH, чтобы разрешить паузу / возобновление в ExoPlayer, генерируется исключение BehindLiveWindowException - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу расширить свой ExoPlayer возможностью приостанавливать прямую трансляцию DASH на срок до 3 минут, после чего поток можно возобновить, оставив на 3 минуты меньше живого фронта.

Сначала это выглядело простоКонфигурирование DefaultLoadController с более длинным буфером min / max следующим образом:

      DefaultLoadControl.Builder defaultLoadControlBuilder = new DefaultLoadControl.Builder();
      defaultLoadControlBuilder.setAllocator(allocator);
      defaultLoadControlBuilder.setBufferDurationsMs(
              180000,//DefaultLoadControl.DEFAULT_MIN_BUFFER_MS,
              180000,//DefaultLoadControl.DEFAULT_MAX_BUFFER_MS,
              DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS,

DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS);
      defaultLoadControlBuilder.setTargetBufferBytes(-1);
      defaultLoadControlBuilder.setPrioritizeTimeOverSizeThresholds(true);
      DefaultLoadControl defaultLoadControl = defaultLoadControlBuilder.createDefaultLoadControl();

С помощью этого кода я вижу, что проигрыватель правильно сохраняет буферизацию в состоянии паузы, проверяя метод DefaultLoadControl.shouldContinueLoading.

К сожалению, после возобновления воспроизведения менее чем через 3 минуты, BehindLiveWindowException выдается примерно через 20 секунд. Как я понял, это исключение выдается, когда игрок запрашивает куски, которые больше не доступны. Но в этом случае я бы предположил, что в буфере 3 минут доступно все.

Так в чем же причина исключения в этом случае и как я могу получить желаемый результат?

I 'м с использованием ExoPlayer v2.10.4. Живой манифест содержит timeShiftBufferDepth 30 с и minBufferTime 12 с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...