Я должен упустить что-то очевидное здесь, но я не могу найти ничего, что позволило бы мне определить, когда MediaPlayer буферизует звук. Я потоковый интернет-аудио, и я хочу отображать индикатор буферизации, но ничего, что я пробовал, позволяет мне знать, когда MediaPlayer прерывает звук для буферизации, поэтому я не могу правильно отображать индикатор буферизации. Любые подсказки?Android - Как сказать, когда MediaPlayer является буферизацией
ответ
@ Daniel, за ваш комментарий к ответу @ JRL, вы, вероятно, могли бы заставить это работать, развернув поток и ожидая таймаута.
Нечто вроде DetectBufferTimeout.java (непроверено) будет делать красиво.
Я, однако, согласен, что разворачивание этой отдельной нити - это немного взлома. Возможно, OnBufferingUpdateListener
может сделать гарантию того, как часто он вызывает onBufferingUpdate()
независимо от того, произошло ли изменение в ходе буферизации, чтобы мы могли обнаруживать, что мы получаем одно и то же значение снова и снова.
Спасибо, Мэтт. Проблема, с которой я сталкиваюсь, заключается в том, что нет уведомления о том, когда MediaPlayer фактически приостанавливает отслеживание трека. Но ваше предложение все еще хорошо. Я думаю, что тот же метод будет применяться ... вместо проверки прогресса буферизации, я должен проверить ход воспроизведения. Если он не обновлен и он не приостановлен или не остановлен с моего конца, то экземпляр MediaPlayer должен был приостановить его, чтобы буферизовать еще несколько аудиоданных. Благодаря! – Daniel 2011-04-13 04:46:59
Ах да, я не понимал, что вы хотите знать, когда трек остановился _специфично, потому что он закончился через свой буфер. – 2011-04-15 03:03:33
Зарегистрировать OnBufferingUpdate слушатель.
Спасибо. Я сделал это, но это только, кажется, говорит мне процент аудиодорожки, которая была буферизована. Я пытался сравнить с текущим временем воспроизведения трека. Я подумал, что, возможно, я мог видеть, соответствует ли текущий процент буфера <= текущему проценту времени воспроизведения. Но это не работает, потому что у MediaPlayer, похоже, есть код буферизации, испеченный так, что он буферизует до того, как буфер полностью исчерпан. Таким образом, я все еще не могу сказать (или контролировать), когда трек буферизуется. Надеюсь, я что-то упустил? – Daniel 2010-12-16 21:53:11
Хорошо, теперь я чувствую себя немного оправданным. Я проверил приложение Pandora, и он не отображает индикатор буферизации. Когда музыка прерывается для буферизации, она просто сидит там, как будто ничего не произошло, и пользовательский интерфейс выглядит так, будто он все еще играет. Поэтому я пришел к выводу, что если вы используете MediaPlayer, просто невозможно определить, временно ли приостановлена трассировка для буферизации.
Однако я заметил, что есть несколько констант MediaPlayer, которые могут быть полезны: MEDIA_INFO_BUFFERING_START и MEDIA_INFO_BUFFERING_END. Но они доступны только в API уровня 9+, и документы ничего не говорят о них. Я предполагаю, что они могут использоваться с OnInfoListener.
Я разочарован, но по крайней мере я могу сейчас прекратить крутить колеса и перейти к чему-то еще.
Как ниже (уровень 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
Вы можете использовать поток, который проверяет текущую позицию MediaPlayer. Если позиция не меняется, вы можете заключить, что носитель находится в состоянии буферизации. Вот полный учебник, который я написал: http://www.ottodroid.net/?p=260
- 1. Как управляющий буферизацией Youtube HTML5 управляет буферизацией?
- 2. android как сказать, когда музыка играет/приостановлена
- 3. Перезапуск MediaPlayer, когда соединение потеряно в Android
- 4. Как выпустить Android MediaPlayer?
- 5. Управление буферизацией видеопотоков в Android
- 6. android - MediaPlayer не играет, когда public static
- 7. Android MediaPlayer Замораживает, когда экран выключен
- 8. Android Mediaplayer
- 9. Android Mediaplayer
- 10. Android Mediaplayer не остановится
- 11. Как управлять буферизацией потоков?
- 12. Поймать Android MediaPlayer ошибки
- 13. MediaPlayer Android
- 14. Android Как удалить MediaPlayer совершенно
- 15. MediaPlayer воспроизводится, когда запускается другой MediaPlayer
- 16. Как правильно отпустить Android MediaPlayer
- 17. Как сделать Android MediaPlayer быстрее?
- 18. Ошибка MediaPlayer android
- 19. Android 2.2 MediaPlayer Error
- 20. Android MediaPlayer останавливается
- 21. Android MediaPlayer Service
- 22. Коды ошибок Android MediaPlayer?
- 23. android MediaPlayer NullPointerException
- 24. Android Service, управляющий MediaPlayer
- 25. Как заставить Android MediaPlayer() останавливаться, когда приложение закрыто?
- 26. MediaPlayer main thread android
- 27. SurfaceView чернет - MediaPlayer Android
- 28. Android - MediaPlayer будет держать
- 29. Android Nexus Lollypop mediaplayer является посредником, ищущим contineously
- 30. MediaPlayer addTimedTextSource в android
Любые обновления по этому вопросу? Я пытаюсь сделать потоковый видеоплеер. Все комментарии приветствуются. – Sen 2011-05-12 09:17:07