Я хочу расширить свой 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 с.