2010-12-16 3 views
29

Я должен упустить что-то очевидное здесь, но я не могу найти ничего, что позволило бы мне определить, когда MediaPlayer буферизует звук. Я потоковый интернет-аудио, и я хочу отображать индикатор буферизации, но ничего, что я пробовал, позволяет мне знать, когда MediaPlayer прерывает звук для буферизации, поэтому я не могу правильно отображать индикатор буферизации. Любые подсказки?Android - Как сказать, когда MediaPlayer является буферизацией

+0

Любые обновления по этому вопросу? Я пытаюсь сделать потоковый видеоплеер. Все комментарии приветствуются. – Sen 2011-05-12 09:17:07

ответ

6

@ Daniel, за ваш комментарий к ответу @ JRL, вы, вероятно, могли бы заставить это работать, развернув поток и ожидая таймаута.

Нечто вроде DetectBufferTimeout.java (непроверено) будет делать красиво.

Я, однако, согласен, что разворачивание этой отдельной нити - это немного взлома. Возможно, OnBufferingUpdateListener может сделать гарантию того, как часто он вызывает onBufferingUpdate() независимо от того, произошло ли изменение в ходе буферизации, чтобы мы могли обнаруживать, что мы получаем одно и то же значение снова и снова.

+1

Спасибо, Мэтт. Проблема, с которой я сталкиваюсь, заключается в том, что нет уведомления о том, когда MediaPlayer фактически приостанавливает отслеживание трека. Но ваше предложение все еще хорошо. Я думаю, что тот же метод будет применяться ... вместо проверки прогресса буферизации, я должен проверить ход воспроизведения. Если он не обновлен и он не приостановлен или не остановлен с моего конца, то экземпляр MediaPlayer должен был приостановить его, чтобы буферизовать еще несколько аудиоданных. Благодаря! – Daniel 2011-04-13 04:46:59

+0

Ах да, я не понимал, что вы хотите знать, когда трек остановился _специфично, потому что он закончился через свой буфер. – 2011-04-15 03:03:33

1

Зарегистрировать OnBufferingUpdate слушатель.

+2

Спасибо. Я сделал это, но это только, кажется, говорит мне процент аудиодорожки, которая была буферизована. Я пытался сравнить с текущим временем воспроизведения трека. Я подумал, что, возможно, я мог видеть, соответствует ли текущий процент буфера <= текущему проценту времени воспроизведения. Но это не работает, потому что у MediaPlayer, похоже, есть код буферизации, испеченный так, что он буферизует до того, как буфер полностью исчерпан. Таким образом, я все еще не могу сказать (или контролировать), когда трек буферизуется. Надеюсь, я что-то упустил? – Daniel 2010-12-16 21:53:11

10

Хорошо, теперь я чувствую себя немного оправданным. Я проверил приложение Pandora, и он не отображает индикатор буферизации. Когда музыка прерывается для буферизации, она просто сидит там, как будто ничего не произошло, и пользовательский интерфейс выглядит так, будто он все еще играет. Поэтому я пришел к выводу, что если вы используете MediaPlayer, просто невозможно определить, временно ли приостановлена ​​трассировка для буферизации.

Однако я заметил, что есть несколько констант MediaPlayer, которые могут быть полезны: MEDIA_INFO_BUFFERING_START и MEDIA_INFO_BUFFERING_END. Но они доступны только в API уровня 9+, и документы ничего не говорят о них. Я предполагаю, что они могут использоваться с OnInfoListener.

Я разочарован, но по крайней мере я могу сейчас прекратить крутить колеса и перейти к чему-то еще.

47

Как ниже (уровень API ≥ 9):

mp.setOnInfoListener(new OnInfoListener() { 

    @Override 
    public boolean onInfo(MediaPlayer mp, int what, int extra) { 
     switch (what) { 
      case MediaPlayer.MEDIA_INFO_BUFFERING_START: 
       loadingDialog.setVisibility(View.VISIBLE); 
       break; 
      case MediaPlayer.MEDIA_INFO_BUFFERING_END: 
       loadingDialog.setVisibility(View.GONE); 
       break; 
     } 
     return false; 
    } 
}); 

Примечание: Существует известная ошибка в Android. При воспроизведении потока HLS он просто не вызывает OnInfoListener или OnBuffering. проверьте эту ссылку OnInfoListener bug

0

Вы можете использовать поток, который проверяет текущую позицию MediaPlayer. Если позиция не меняется, вы можете заключить, что носитель находится в состоянии буферизации. Вот полный учебник, который я написал: http://www.ottodroid.net/?p=260

Смежные вопросы