Ответ 1
Итак, у меня такой же сценарий, и мне нужно знать, когда начнется следующее видео в плейлисте. Я обнаружил, что ExoPlayer.EventListener
имеет метод под названием onPositionDiscontinuity()
, который вызывается каждый раз, когда видео изменяется или "ищет" следующего в списке воспроизведения.
Я не играл с этим методом широко, но из того, что я вижу до сих пор, это метод, о котором вы должны беспокоиться. Нет параметров, которые передаются при запуске метода, поэтому вам нужно будет хранить какой-то счетчик или очередь, чтобы отслеживать, что играется в любой момент.
Надеюсь, это поможет!
Изменить: изменение индекса, возвращаемого Exoplayer.getCurrentWindowIndex()
, является рекомендуемым способом, чтобы обнаружить изменение элемента в плейлист MediaSource
.
int lastWindowIndex = 0; // global var in your class encapsulating exoplayer obj (Activity, etc.)
exoPlayer.addListener(new ExoPlayer.EventListener() {
@Override
public void onLoadingChanged(boolean isLoading) {
}
@Override
public void onPlayerStateChanged(boolean playWhenReady, int playbackState) {
}
@Override
public void onTimelineChanged(Timeline timeline, Object manifest) {
}
@Override
public void onPlayerError(ExoPlaybackException error) {
}
@Override
public void onPositionDiscontinuity() {
//THIS METHOD GETS CALLED FOR EVERY NEW SOURCE THAT IS PLAYED
int latestWindowIndex = exoPlayer.getCurrentWindowIndex();
if (latestWindowIndex != lastWindowIndex) {
// item selected in playlist has changed, handle here
lastWindowIndex = latestWindowIndex;
// ...
}
}
});