Коды ошибок Android MediaPlayer?

Я изо всех сил пытаюсь заставить работать радио в прямом эфире на Android. Я использую класс MediaPlayer и просто устанавливаю URL-адрес и играю в него. Он отлично работает по большей части, но через 5-30 минут неизбежно умирает. На телефонах 2.1 (точнее, на герое) я получаю этот вывод журнала

W/MediaPlayer( 7919): info/warning (1, 26)
I/MediaPlayer( 7919): Info (1,26)
I/MediaStreamService( 7919): mPlayer info code:1  extra:26
E/MediaPlayer( 7919): error (1, -11)
E/MediaPlayer( 7919): Error (1,-11)

Где MediaStreamService — моя служба, содержащая MediaPlayer, вывод поступает из OnInfoListener

На телефонах 2.2 я никогда не получаю обратный вызов OnInfoListener, поток просто умирает. Но я вижу это в логарифме

E/HTTPStream( 1020): recv failed, errno = 11 (Try again)
E/HTTPDataSource( 1020): retrying connection failed

Кажется, работает безупречно на моем телефоне 1.6, несмотря на постоянный спам logcat

E/PlayerDriver( 82): Invalid percentage value <big growing number>

Мой вопрос: что означают коды ошибок (1, 26)? Что вызывает сбой моего медиаплеера? Проблема 2.1 вообще связана с проблемой 2.2? Спасибо, Натан

Изменить: я искал в исходном коде OnInfoListener и нашел public static final int MEDIA_INFO_UNKNOWN = 1;. Я не уверен, что именно это означает, и не могу найти, где хранятся эти дополнения. Любое понимание того, что означает неизвестная информация о СМИ? или то, что означает это число 26, было бы очень признательно.


person Nathan Schwermann    schedule 04.10.2010    source источник


Ответы (3)


Мой вопрос: что означают коды ошибок (1, 26)?

  • 26 означает PVMFInfoErrorHandlingStart, просто индикация ошибки

Ошибка -11, что означает PVMFErrTimeout. Вы можете просмотреть файлы определений здесь текст ссылки

person swcai    schedule 12.10.2010
comment
Ссылка не работает. Вы можете найти его здесь - person efeyc; 05.10.2011

Может данные RDS? Вы устанавливаете размер буфера вручную?

person ykatchou    schedule 07.10.2010
comment
Есть ли способ установить размер буфера на MediaPlayer, возможно, я пропустил это. - person Nathan Schwermann; 08.10.2010
comment
Кажется, есть событие для просмотра состояния буферов: developer.android.com /reference/android/media/MediaPlayer.html - person ykatchou; 08.10.2010

Чтобы начать воспроизведение, необходимо вызвать start(). После успешного возврата start() объект MediaPlayer находится в состоянии Started. isPlaying() можно вызвать, чтобы проверить, находится ли объект MediaPlayer в состоянии Started.

В состоянии Started внутренний механизм проигрывателя вызывает предоставленный пользователем метод обратного вызова OnBufferingUpdateListener.onBufferingUpdate(), если OnBufferingUpdateListener был зарегистрирован заранее с помощью setOnBufferingUpdateListener(OnBufferingUpdateListener). Этот обратный вызов позволяет приложениям отслеживать состояние буферизации при потоковой передаче аудио/видео.

Вызов start() не влияет на объект MediaPlayer, который уже находится в состоянии Started.

Может быть, это часть ответа.

person ykatchou    schedule 08.10.2010
comment
OnBufferingUpdate не вызывается на устройствах 2.2 с этим потоком, потому что размер файла неизвестен. (бесконечный размер потока радиостанции) - person Nathan Schwermann; 08.10.2010