MediaPlayer: состояние буфера для потока интернет-радио?

Я играю потоки интернет-радио, используя MediaPlayer. Однако буферизация, кажется, занимает у меня около 10 секунд каждый раз, когда я начинаю воспроизводить поток. Могу ли я как-нибудь показать:

  1. Прогресс при начале игры? Например. индикатор выполнения в графическом интерфейсе
  2. Состояние буфера после воспроизведения? (например, чтобы дать предупреждение, когда буфер по какой-то причине исчерпан)

Я пытался использовать setOnBufferingUpdateListener(), но, насколько я могу судить, он работает только для потоков, продолжительность которых известна. (Поэтому неприменимо к интернет-радио, если я не ошибаюсь - его не запускали)


person CL22    schedule 31.07.2014    source источник


Ответы (1)


Реализует MediaPlayer.OnInfoListener, переопределяя метод onInfo, у вас есть действие для управления состоянием MediaPlayer следующим образом:

@Override
public boolean onInfo(MediaPlayer arg0, int what, int extra) {
    Log.i(LOG_TAG, "MediaPlayer INFO code = " + what + " extra=" + extra);
    if (what == MediaPlayer.MEDIA_INFO_BUFFERING_START) {
        Log.d(LOG_TAG, "Start buffering...");

    } else if (what == MediaPlayer.MEDIA_INFO_BUFFERING_END) {
        Log.d(LOG_TAG, "End buffering...");
        Log.d(LOG_TAG, "Start playing...");

    }
    return false;       
}

Взгляните на http://developer.android.com/reference/android/media/MediaPlayer.html для других действий;)

person axl coder    schedule 31.07.2014
comment
Из того, что я могу сказать, это опять же относится только к СМИ, где известна продолжительность. onInfo() не запускается для радиопотоков - person CL22; 31.07.2014
comment
Я не могу понять, почему вы так говорите, учитывая, что я использую метод, который я разместил внутри сервиса для своего приложения для радио!!!!!! Так почему вы так думаете??? - person axl coder; 31.07.2014
comment
Странно, единственный обратный вызов MediaPlayer, который вызывается, это onPrepared(). Я посмотрю на это и поставлю вам +1, если это сработает. Но я все же хотел бы знать, есть ли способ определить, сколько было буферизовано (не только если оно началось или закончилось буферизация) - person CL22; 31.07.2014
comment
Я не знаю, почему это единственный callBack, который вызывается, уверяю вас, что в моей службе и onInfo, и onBufferingUpdate вызываются каждый раз, когда я запускаю поток с URL-адреса webRadio. - person axl coder; 01.08.2014