2015-10-03 32 views
25

Sto cercando di utilizzare ExoPlayer contrari a MediaPlayer e io non riesco a capirlo ...ExoPlayer e avviare/mettere in pausa/comandi seekTo

MediaPlayer ha .start()/.pause() comandi ... e posso solo seekTo(1287) e avvia automaticamente la riproduzione ...

Come faccio a fare questo con ExoPlayer? Ho cercato di fare seekTo(1287) ma non iniziare a giocare dopo ... Ho anche aggiunto .setPlayWhenReady(true) dopo, e ancora senza fortuna ...

sono in grado di .stop() ... ma non riesco a ottenere per ricominciare a giocare, a meno che non sia di nuovo il .prepare() ... ma non credo che dovrei farlo tra una pausa e l'altra.

sto usando i miei comandi e metodi contrari alla MediaController come nel ExoPlayer Demo ... non riesco a vedere come i controlli sono implementati ...

qualche suggerimento chiunque?

Edit:

OK, ho capito di pausa e inizio ...

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

Ma sto ancora problemi con il tracking ... .seekTo opere intermittenza ... a volte funziona ... ma altre volte ottengo questo errore:

E/AudioTrack: AudioTrack::set : Exit 

(e raggiunge solo lo stato del buffer ... non ottiene abbastanza al "pronto" ...

risposta

38

Il official example of the PlayerControl nel ExoPlayer codice sorgente fare esattamente quello che hai chiesto:

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); 
    } 

} 

Se si verificano comportamenti strani durante l'operazione di ricerca, può essere causa di voi particolare flusso/tipo di file. Posso suggerirti di dare un'occhiata allo di ExoPlayer e, infine, segnalare qualsiasi issue su Github.

+1

link github sono morti – IHeartAndroid

+0

ExoPlayer è cambiato molto in v2. Impossibile trovare il collegamento GH aggiornato per PlayerControl.java, ma ecco il link per l'implementazione di base: https://github.com/google/ExoPlayer/blob/release-v2/library/src/main/java/com/ google/android/exoplayer2/ExoPlayerImplInternal.java –

+3

ExoPlayer.UNKNOWN_TIME -> com.google.android.exoplayer2.C.TIME_UNSET Il collegamento – shiami