2012-04-06 213 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