Search code examples
androidmp3media-player

Android MediaPlayer play mp3 from url with bad network


I want to play mp3 from url with MediaPlayer, but the network is disconnected when buffering a part of stream, how can I going on buffering the remaining stream when the network connects again.

mp = MediaPlayer.create(this, Uri.parse("http://media.cmechina.net/mobile/201500011693/02/flv/5.mp3"));
mp.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        Log.d("TAG", "percent:  " + percent);
    }
});

mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.d("TAG", "onError === what:  " + what + " extra: " + extra);
        return false;
    }
});

mp.setOnInfoListener(new MediaPlayer.OnInfoListener() {

    @Override
    public boolean onInfo(MediaPlayer mp, int what, int extra) {
        Log.d("TAG", "onInfo   what:  " + what + " extra: " + extra);
        return false;
    }
});

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        Log.d("TAG", "onCompletion is called!");
    }
});

Solution

  • when internet goes down, you should know from onError method, when that happens, you can save the position where the player stopped and try to stream again. Personally i prefer creating instance from MediaPlayer then i use

    player.setOnPreparedListener(this);
    androidPlayer.setDataSource(URL);
    androidPlayer.prepareAsync();
    

    once the player is ready and triggers onPrepared(MediaPlayer player), check if there is saved position then call player.seekTo(timeMilisecond)

    remember to set listener for onPrepared and on onSeekComplete