Exoplayer (2.0.0) выдает исключение BehindLiveWindowException при воспроизведении видео HLS в реальном времени

#android #http-live-streaming #exoplayer #exoplayer2.x

#Android #http-прямая трансляция #exoplayer #exoplayer2.x

Вопрос:

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

     com.google.android.exoplayer2.source.BehindLiveWindowException
    at com.google.android.exoplayer2.source.hls.HlsChunkSource.getNextChunk(HlsChunkSource.java:255)
    at com.google.android.exoplayer2.source.hls.HlsSampleStreamWrapper.continueLoading(HlsSampleStreamWrapper.java:313)
    at com.google.android.exoplayer2.source.CompositeSequenceableLoader.continueLoading(CompositeSequenceableLoader.java:55)
    at com.google.android.exoplayer2.source.hls.HlsMediaPeriod.continueLoading(HlsMediaPeriod.java:198)
    at com.google.android.exoplayer2.ExoPlayerImplInternal.maybeContinueLoading(ExoPlayerImplInternal.java:1080)
    at com.google.android.exoplayer2.ExoPlayerImplInternal.handleContinueLoadingRequested(ExoPlayerImplInternal.java:1067)
    at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:289)
    at android.os.Handler.dispatchMessage(Handler.java:98)
    at android.os.Looper.loop(Looper.java:135)
    at android.os.HandlerThread.run(HandlerThread.java:61)
    at com.google.android.exoplayer2.util.PriorityHandlerThread.run(PriorityHandlerThread.java:40)
  

Комментарии:

1. Какие-либо обновления по этому поводу на данный момент? Потому что я также сталкиваюсь с такой же проблемой на exoplayer r2.9.5 для воспроизведения потокового видео в реальном времени.

Ответ №1:

Согласно версии Google 2.0 очень нестабилен для воспроизведения в реальном времени. Поэтому я не рекомендую на данный момент переходить на 2.0 для воспроизведения в режиме реального времени. Возвращаясь к вашей проблеме BehindLiveWindowException, Google все еще работает над устранением этой проблемы в рамках функции Live HLS seek.

Пожалуйста, отслеживайте статус здесь:
https: // github.com/google/ ExoPlayer/issues /1782

В качестве временного исправления вы можете снова вызвать preparePlayer() в onError().

  @Ovierride
 public void onError(Exception e) {

   if (e instanceof ExoPlaybackException
            amp;amp; e.getCause() instanceof BehindLiveWindowException) {
      preparePlayer(true);
    }
 }
  

Комментарии:

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

Ответ №2:

Позиция воспроизведения может оказаться за окном live, например, если проигрыватель приостановлен или буферизуется в течение достаточно длительного периода времени. Если это произойдет, эта ссылка вам поможет.