@Override public boolean onError(MediaPlayer _mp, int what, int extra) { TrackMediaPlayer mp = (TrackMediaPlayer) _mp; if (what == MediaPlayer.MEDIA_ERROR_UNKNOWN) { // we probably lack network streamError(mp.getTrack(), "Unknown error, possibly bad network connection"); stop(); return true; } // not sure what error code -1 exactly stands for but it causes player to start to jump songs // if there are more than 5 jumps without playback during 1 second then we abort // further playback if (what == -1) { long failTime = System.currentTimeMillis(); if (failTime - lastErrorTime > FAIL_TIME_FRAME) { // outside time frame errorCount = 1; lastErrorTime = failTime; } else { // inside time frame errorCount++; if (errorCount > ACCEPTABLE_FAIL_NUMBER) { streamError(mp.getTrack(), "Too many errors"); stop(); errorCount = 0; return true; } } } return false; }
public void playRadio(RadioStream stream) { setMusicType(MusicType.RADIO); Track track = new Track(); track.audio = stream.stream; track.name = stream.playingnow.track_name; track.album_id = stream.playingnow.album_id; track.artist_id = stream.playingnow.artist_id; track.id = stream.playingnow.track_id; track.album_image = stream.playingnow.track_image; synchronized (mediaPlayers) { if (currentMediaPlayer == null) { currentMediaPlayer = setupPlayer(track); } else if (currentMediaPlayer.getTrack().audio.equals(stream.stream)) { currentMediaPlayer.setTrack(track); } else { for (TrackMediaPlayer player : mediaPlayers) player.stop(); currentMediaPlayer = setupPlayer(track); } if (currentMediaPlayer != null) { currentMediaPlayer.setNext(null); currentMediaPlayer.start(); } } }
public void togglePause() { synchronized (mediaPlayers) { if (currentMediaPlayer != null) { if (currentMediaPlayer.isPaused()) currentMediaPlayer.start(); else currentMediaPlayer.pause(); runOnListener( (MusicPlayerListener l) -> l.onTrackPauseToggle(currentMediaPlayer.getTrack(), currentMediaPlayer.isPaused())); } } }
public void playTrack(Track track, Track nextTrack) { setMusicType(MusicType.TRACK); synchronized (mediaPlayers) { if (currentMediaPlayer == null) { currentMediaPlayer = setupPlayer(track); } else if (currentMediaPlayer.getTrack() != track) { for (TrackMediaPlayer player : mediaPlayers) player.stop(); currentMediaPlayer = setupPlayer(track); } if (currentMediaPlayer != null) { currentMediaPlayer.start(); runOnListener((MusicPlayerListener l) -> l.onTrackStart(track)); if (nextTrack != null) { TrackMediaPlayer nextPlayer = currentMediaPlayer.getNext(); if (nextPlayer == null || nextPlayer.getTrack() != nextTrack) currentMediaPlayer.setNext(setupPlayer(nextTrack)); } else { currentMediaPlayer.setNext(null); } } } }
@Override public void onCompletion(MediaPlayer _mp) { TrackMediaPlayer mp = (TrackMediaPlayer) _mp; currentMediaPlayer = mp.getNext(); runOnListener((MusicPlayerListener l) -> l.onTrackComplete(mp.getTrack())); }