6

我正在尝试使用 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.
4

3 回答 3

5

抱歉回复晚了,在寻找另一个问题的答案时遇到了这个问题。

如果您仍然需要答案,您可以start()在它还在准备中的时候打电话。PrepareAsync()立即返回,不像prepare(). 对流使用 'prepare()` 的问题是它会阻塞,直到它有足够的数据开始播放。

你想要做的是设置一个OnPreparedListener,并start()从那里调用。

于 2011-06-22T00:57:46.160 回答
3

问题是不直接支持内容类型“audio/aacp”流。可以使用某些解码库来播放“aacp”,请看下面的解决方案:

适用于 Android 的免费软件高级音频 (AAC) 解码器

如何使用这个库?

有关更多详细信息,请参阅

使用时考虑法律问题

于 2012-01-12T13:38:19.603 回答
-1

1)避免使用prepare(),改用prepareAsyc()。(或)将您的播放逻辑放在工作线程或单独的线程中。1)避免使用player.prepare(),而是使用player.prepareAsync();

(或)将逻辑保留在单独的线程中。(您可以使用意图服务、AsyncTask 等)

2)也尝试使用静态构造函数 MediaPlayer.create(Uri);

于 2012-07-10T13:29:44.827 回答