2015-10-03 8 views
25

मैं ExoPlayerMediaPlayer करने का विरोध किया है और मैं यह पता लगा नहीं कर पा रहे उपयोग करने के लिए कोशिश कर रहा हूँ ...ExoPlayer और शुरू/रोकें/seekTo आदेश

MediaPlayer.start()/.pause() आदेशों है ... और मैं बस कर सकते हैं seekTo(1287) और यह स्वचालित रूप से खेलना शुरू कर देता है ...

मैं इसे ExoPlayer के साथ कैसे कर सकता हूं? मैं seekTo(1287) करने की कोशिश की है लेकिन यह बाद खेलना शुरू नहीं करता है ... मैं भी उस के बाद .setPlayWhenReady(true), और फिर भी प्रयास विफल ...

जोड़ लिया है मैं .stop() करने में सक्षम हूँ ... लेकिन मैं नहीं मिल सकता है इसके बाद फिर से खेलना शुरू करें जब तक कि मैं .prepare() दोबारा नहीं ... लेकिन मुझे नहीं लगता कि मुझे हर विराम और खेल के बीच ऐसा करना होगा।

मैं अपने खुद के नियंत्रण और तरीकों ExoPlayer डेमो में की तरह MediaController करने का विरोध उपयोग कर रहा हूँ ... मैं काफी नहीं देख सकता कैसे नियंत्रण लागू किया जाता है ...

कोई सुझाव किसी को?

संपादित करें:

ठीक है, मैं ठहराव पता लगा और शुरू ...

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

लेकिन मैं अभी भी ट्रैकिंग में समस्या ... रुक-रुक कर .seekTo काम करता है ... कभी कभी हो रही है यह काम करता है ... लेकिन दूसरी बार मुझे यह त्रुटि मिलती है:

E/AudioTrack: AudioTrack::set : Exit 

(और यह केवल बफर राज्य में आता है ... काफी नहीं मिलता है "तैयार" ...

उत्तर

38

official example of the PlayerControlExoPlayer स्रोत कोड में करने के लिए आप वास्तव में क्या पूछा कार्य करें:

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

} 

आप की तलाश आपरेशन के दौरान अजीब व्यवहार का सामना कर रहे हैं, तो यह आप के कारण हो सकता विशेष धारा/फ़ाइल प्रकार। मैं आपको एक्सपोप्लेयर के पर एक नज़र डालने का सुझाव दे सकता हूं और अंततः, गीथूब पर किसी भी issue की रिपोर्ट कर सकता हूं।

+1

जिथब लिंक मृत हैं – IHeartAndroid

+0

एक्सपोप्लेर v2 में बहुत कुछ बदल गया। PlayerControl.java के लिए अद्यतन जीएच लिंक नहीं मिला, लेकिन मूल कार्यान्वयन के लिए यहां लिंक है: 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

संबंधित मुद्दे