vanced latest example android mp3 android-mediaplayer mediacontroller exoplayer

android - latest - ExoPlayer e iniciar/pausar/buscar comandos



exoplayer v2 download (2)

Estoy tratando de usar ExoPlayer , a diferencia de MediaPlayer y parece que no puedo resolverlo ...

MediaPlayer tiene .start() / .pause() ... y puedo seekTo(1287) y comienza a reproducirse automáticamente ...

¿Cómo hago esto con ExoPlayer ? He intentado hacer seekTo(1287) pero no comienza a jugar después de ... También agregué .setPlayWhenReady(true) después de eso, y aún no tengo suerte ...

Soy capaz de .stop() ... pero no puedo hacer que vuelva a jugar después de eso a menos que .prepare() otra vez ... pero no creo que deba hacer eso entre cada pausa y jugar.

Estoy usando mis propios controles y métodos opuestos a MediaController como en la demostración de ExoPlayer ... No puedo ver cómo se implementan los controles ...

¿Alguna sugerencia a alguien?

Editar:

OK, me di cuenta de pausa y comienzo ...

.setPlayWhenReady(true) // start .setPlayWhenReady(false) // pause

Pero sigo teniendo problemas con el seguimiento ... .seekTo funciona de forma intermitente ... a veces funciona ... pero otras veces me sale este error:

E/AudioTrack: AudioTrack::set : Exit

(y solo llega al estado del búfer ... no llega a "listo" ...


Así es como lo hace el código de ejemplo para Exoplayer 2:

player.setPlayWhenReady(true);

comienza la reproducción, ( false detiene)

Si el reproductor ya está listo, este método puede usarse para pausar y reanudar la reproducción.

Para buscar, usan

boolean haveStartPosition = startWindow != C.INDEX_UNSET; if (haveStartPosition) { player.seekTo(startWindow, startPosition); } player.prepare(mediaSource, !haveStartPosition, false);

Así que parece que necesitas prepare después del seekTo .


El ejemplo oficial de PlayerControl en el código fuente de ExoPlayer hace exactamente lo que pidió:

public class PlayerControl implements MediaPlayerControl { private final ExoPlayer exoPlayer; public PlayerControl(ExoPlayer exoPlayer) { this.exoPlayer = exoPlayer; } @Override public boolean canPause() { return true; } @Override public boolean canSeekBackward() { return true; } @Override public boolean canSeekForward() { return true; } @Override public int getAudioSessionId() { throw new UnsupportedOperationException(); } @Override public int getBufferPercentage() { return exoPlayer.getBufferedPercentage(); } @Override public int getCurrentPosition() { return exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0 : (int) exoPlayer.getCurrentPosition(); } @Override public int getDuration() { return exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0 : (int) exoPlayer.getDuration(); } @Override public boolean isPlaying() { return exoPlayer.getPlayWhenReady(); } @Override public void start() { exoPlayer.setPlayWhenReady(true); } @Override public void pause() { exoPlayer.setPlayWhenReady(false); } @Override public void seekTo(int timeMillis) { long seekPosition = exoPlayer.getDuration() == ExoPlayer.UNKNOWN_TIME ? 0 : Math.min(Math.max(0, timeMillis), getDuration()); exoPlayer.seekTo(seekPosition); } }

Si experimenta comportamientos extraños durante la operación de búsqueda, puede deberse a su tipo de archivo / secuencia en particular. Puedo sugerirle que eche un vistazo a la implementación básica de ExoPlayer y, eventualmente, informe cualquier issue en Github.