Обратный вызов Android exoplayer при завершении поиска

Я использую exoplayer на Android. Мне нужно показать индикатор прогресса, когда видео ищется. Я могу начать показывать индикатор прогресса в методе seekTo, но какой метод обратного вызова мне следует использовать, чтобы скрыть индикатор прогресса, когда поиск завершен.


person Prabhu M    schedule 18.07.2016    source источник


Ответы (3)


Реализовать ExoPlayer.EventListener. Есть способ onPlayerStateChanged. Когда playbackState == ExoPlayer.STATE_READY, то скройте индикатор вашего прогресса.

person Sough    schedule 22.02.2017

onSeekProcessed(), вы получите это через Player.EventListener.

person Sachin Verma    schedule 30.12.2019

Краткий ответ: слушайте @Sough и используйте EventListener.onPlaybackStateChanged с STATE_READY.

Длинная история:

onSeekProcessed() сначала звучит идеально, но он устарел, начиная с версии 2.12.0 ExoPlayer, со следующим комментарием:

@deprecated Обращения обрабатываются без задержек. Вместо этого слушайте #onPositionDiscontinuity (int) по причине #DISCONTINUITY_REASON_SEEK.

Итак, onPositionDiscontinuity(int) следует использовать с причиной DISCONTINUITY_REASON_SEEK.

Каким-то образом это заставило меня задуматься, действительно ли это сработает в момент, когда поиск завершен и видео готово к продолжению без какой-либо задержки (как в onSeekProcessed). Потому что семантически момент инициирования поиска уже может быть интерпретирован как разрыв позиции (как в случае, когда поиск обрабатывается без задержки).

И действительно, если вы посмотрите на временные рамки событий, которые я измерил во время выполнения, все становится очевидным:

  0ms - <Seek initiated>
  1ms - onPositionDiscontinuity -> DISCONTINUITY_REASON_SEEK
  2ms - onPlaybackStateChanged -> STATE_BUFFERING
  4ms - onSeekProcessed
208ms - onPlaybackStateChanged -> STATE_READY

Это показывает, что прослушивание onPlaybackStateChanged с STATE_READY по-прежнему является лучшим вариантом.

Заключение: onSeekProcessed звучит действительно хорошо, но работает неправильно. Так что он устарел, и предлагается альтернатива. К сожалению, не так, как ожидалось. Сложно, но факт.

person jox    schedule 16.01.2021