2015-10-03 16 views
25

I ExoPlayer Gegensatz zu MediaPlayer verwenden Ich versuche, und ich kann es nicht herausgefunden scheinen ...ExoPlayer und Start/Pause/seekTo Befehle

MediaPlayer.start()/.pause() Befehle hat ... und ich kann nur seekTo(1287) und es beginnt automatisch zu spielen ...

Wie mache ich das mit ExoPlayer? Ich habe versucht, seekTo(1287) zu tun, aber es startet nicht nach dem Spiel ... Ich habe auch .setPlayWhenReady(true) danach, und noch kein Glück ...

Ich bin in der Lage zu .stop() ... aber ich kann nicht es beginnt danach wieder zu spielen, es sei denn ich wieder .prepare() ... aber ich denke nicht, dass ich das zwischen jeder Pause und Spiel machen sollte.

ich meine eigenen Kontrollen und Methoden zu MediaController wie in der ExoPlayer Demo Gegensatz bin mit ... Ich kann nicht ganz sehen, wie die Kontrollen durchgeführt werden ...

Irgendwelche Vorschläge anyone?

Edit:

OK, ich Pause herausgefunden und starten ...

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

Aber ich habe immer noch mit der Tracking-Probleme ... .seekTo intermittierend arbeitet ... manchmal es funktioniert ... aber manchmal bekomme ich diesen Fehler:

E/AudioTrack: AudioTrack::set : Exit 

(und es wird nur in den Pufferzustand ... nicht ganz erhalten zu „ready“ ...

Antwort

38

Die official example of the PlayerControl im ExoPlayer Quellcode tun genau das, was Sie gefragt:

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

} 

Wenn seltsames Verhalten während der Suchoperation erlebt wird, kann es wegen dir bestimmter Stream/Dateityp. Ich kann Ihnen vorschlagen, einen Blick auf die des ExoPlayer zu werfen und eventuell alle issue auf Github zu melden.

+1

github Links sind tot – IHeartAndroid

+0

ExoPlayer hat sich in v2 stark verändert. Der aktualisierte GH-Link für PlayerControl.java wurde nicht gefunden, aber hier ist der Link für die Basisimplementierung: 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 – shiami