2012-04-06 164 views
1

我做Android的一个流musicplayer。 我试过用MediaPlayerAndroid的声音流

mp.setDataSource("http://www.myServerPage.com/songUrl.mp3"); 
mp.prepare(); 
mp.start(); 

它工作但不好。 准备状态非常缓慢,通常应用程序处于冻结状态。

我搜索过论坛和教程很多,据我可以看到这是这样做的常见方式。

不要任何人知道的是它是开放流的另一种方式从服务器播放音乐或有什么好的建议,也许在NDK或通过一些其他的InputStream?

感谢您的帮助。 /micke

回答

1

Media Playback article非常清楚如何处理远程媒体源:呼叫prepareAsync()并设置侦听器以在源播放准备就绪时收到通知。

这样做的原因正是您遇到什么:

(...)调用准备()可能需要很长的时间来执行,因为它 可能涉及的读取和解码媒体数据。所以,是与可能需要很长时间来执行任何方法的情况下 ,你应该永远从应用程序的UI线程调用它 。这样做会造成用户界面 挂起,直到该方法返回,这是一个非常糟糕的用户体验 并可能导致ANR(应用程序无响应)错误。

我建议你阅读上面提到的文章,了解更多信息和指标,以帮助您进一步开发。

+0

谢谢你的回答。因此,即使是商业应用Spotify等,也可以使用这种播放流式音乐的方式。 – 2012-04-06 02:28:08

+0

@bajenmicke:我不能对Spotify的说话,但我密切熟悉的其他音乐应用程序(由一对夫妇的设备制造商分布的ROM的一部分),是的,一个使用标准的'MediaPlayer'和' prepareAsync()'用于播放*全部*内容,无论是本地还是远程。根据您的应用程序的具体情况,您可能还需要考虑设置专门的“服务”来托管MediaPlayer。 – 2012-04-06 03:41:08

+0

好的。感谢您的好答案。然后我知道该怎么处理 – 2012-04-06 11:28:12