Потоковое аудио с Android MediaPlayer - PullRequest
6 голосов
/ 26 апреля 2011

Я пытаюсь создать аудио-стример с помощью Android MediaPlayer. Это нормально, если он не работает с Android 2.1 или ниже. Мне нужно иметь возможность воспроизводить звук из потока SHOUTcast. Вот мой код:

player = new MediaPlayer();
try {
player.setDataSource("http://87.230.103.107:8000");
player.prepareAsync();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
    e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
player.start();

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

Спасибо!

[ОБНОВЛЕНО] Я получаю следующие ошибки:

04-25 23:35:15.432: ERROR/MediaPlayer(283): start called in state 4
04-25 23:35:15.432: ERROR/MediaPlayer(283): error (-38, 0)
04-25 23:35:15.602: ERROR/MediaPlayer(283): Error (-38,0)
04-25 23:35:17.542: INFO/AwesomePlayer(33): calling prefetcher->prepare()
04-25 23:35:18.547: INFO/Prefetcher(33): [0x17650] cache below low water mark, filling cache.
04-25 23:35:18.762: INFO/AwesomePlayer(33): prefetcher is done preparing
04-25 23:35:19.769: ERROR/AwesomePlayer(33): Not sending buffering status because duration is unknown.

Ответы [ 3 ]

5 голосов
/ 22 июня 2011

Извините за поздний ответ, наткнулся на это, ища ответы на другую проблему.

Если вам все еще нужен ответ, вы звоните start(), пока он еще готовится. PrepareAsync() возвращается немедленно, в отличие от prepare(). Проблема использования 'prepare () `с потоками заключается в том, что он будет блокироваться до тех пор, пока не будет достаточно данных для начала воспроизведения.

То, что вы хотите сделать, это установить OnPreparedListener, и оттуда вызывать start().

3 голосов
/ 12 января 2012

Проблема в том, что потоковая передача контента типа «аудио / aacp» напрямую не поддерживается. Некоторые библиотеки декодирования могут быть использованы для воспроизведения «aacp», см. Решение ниже:

Бесплатный декодер Advanced Audio (AAC) для Android

Как использовать эту библиотеку?

Подробнее см. this .

Рассмотреть правовые вопросы при его использовании .

  • проект http://code.google.com/p/aacplayer-android/ лицензирован под GPL, так что вы можете создавать коммерческие приложения * поверх него, но вы необходимо заполнить GPL - в основном это означает опубликовать ваш код как Что ж. * Если вы используете второй проект http://code.google.com/p/aacdecoder-android/, тогда вам не нужно опубликуйте свой * код (библиотека лицензирована под LGPL).
0 голосов
/ 10 июля 2012

1) Избегайте использования prepare (), вместо этого используйте prepareAsyc ().(или) поместите свою игровую логику в рабочий поток или в отдельный поток.1) Избегайте использования player.prepare (), вместо этого используйте player.prepareAsync ();

(или) храните логику в отдельном потоке.(вы можете использовать службу намерений, AsyncTask и т. д.)

2) Также попробуйте использовать статический конструктор MediaPlayer.create (Uri);

...