latest google extension exoplayer2 exo example android exoplayer android-exoplayer

android - google - exoplayer latest release



ExoPlayer 2 Playlist Listener (3)

Estoy usando las nuevas funciones de ExoPlayer 2.x para reproducir una lista de archivos de audio como este:

List<MediaSource> playlist = new ArrayList<>(); ... ConcatenatingMediaSource concatenatedSource = new ConcatenatingMediaSource( playlist.toArray(new MediaSource[playlist.size()])); mExoPlayer.prepare(concatenatedSource); mExoPlayer.setPlayWhenReady(true);

Esto funciona bien, pero para actualizar mi interfaz de usuario en consecuencia, necesito saber qué pista se está reproduciendo actualmente y el progreso de esta. ¿Hay algún oyente de ExoPlayer?

¡Gracias!


Así que estoy en un escenario similar y necesito saber cuándo comienza el próximo video en la lista de reproducción. Descubrí que ExoPlayer.EventListener tiene un método llamado onPositionDiscontinuity() que se llama cada vez que el video cambia o "busca" al siguiente en la lista de reproducción.

No he jugado mucho con este método, pero por lo que puedo ver hasta ahora, este es el método que debería preocuparte. No hay parámetros que se pasen cuando se activa el método, por lo que tendrá que mantener algún tipo de contador o cola para realizar un seguimiento de lo que se está reproduciendo en un momento dado.

Esperemos que esto ayude!

Edición: el cambio en el índice devuelto por Exoplayer.getCurrentWindowIndex() es la forma recomendada de detectar el cambio de un elemento en una lista de reproducción 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; // ... } } });



Puedes implementar el siguiente evento y actualizar tu interfaz de usuario según el estado del jugador.

mExoPlayer.addListener(new ExoPlayer.Listener() { @Override public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { if (playbackState == PlaybackStateCompat.STATE_PLAYING) { //do something } } @Override public void onPlayWhenReadyCommitted() { } @Override public void onPlayerError(ExoPlaybackException error) { mExoPlayer.stop(); } });