Beispiel #1
0
  @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;
  }
Beispiel #2
0
  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();
      }
    }
  }
Beispiel #3
0
  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()));
      }
    }
  }
Beispiel #4
0
  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);
        }
      }
    }
  }
Beispiel #5
0
 @Override
 public void onCompletion(MediaPlayer _mp) {
   TrackMediaPlayer mp = (TrackMediaPlayer) _mp;
   currentMediaPlayer = mp.getNext();
   runOnListener((MusicPlayerListener l) -> l.onTrackComplete(mp.getTrack()));
 }