2011-04-26 97 views
6

我正嘗試使用Android MediaPlayer創建音頻流式傳輸方式。如果它不適用於Android 2.1或波紋管,那就好了。我需要能夠播放來自SHOUTcast流的音頻。這裏是我的代碼:使用Android MediaPlayer進行音頻流式傳輸

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. 
+0

你在模擬器中運行它嗎?我之前在模擬器中運行媒體時遇到了問題。嘗試在實際的設備中,也許它會工作。 – dmon 2011-04-26 02:38:34

+0

是的,我在模擬器上運行它。太糟糕了,我沒有一個真正的設備:( – 2011-04-26 02:40:27

+0

我的預感是,這是問題,其他人可能會有另一個需要。 – dmon 2011-04-26 02:50:13

回答

5

對不起,我遲到響應,跑過這一邊尋找答案的一個問題。

如果您仍需要一個答案,同時仍然正在準備它,你打電話start()。與prepare()不同,PrepareAsync()立即返回。在流中使用'prepare()`的問題是它會阻塞,直到它有足夠的數據開始播放。

你想要做的是設置一個OnPreparedListener,並從那裏調用start()

3

的問題是內容類型「音頻/ AACP」流不直接支持。一些解碼庫可以起訴打 「AACP」,請參閱下面的解決方案:

Freeware Advanced Audio (AAC) Decoder for Android

How to use this library?

欲瞭解更多詳情請參閱this

Consider legal issues while using it

-1

1)避免使用prepare(),請使用prepareAsyc()代替。 (或)把你的演奏邏輯放在一個工作線程或一個單獨的線程中。 1)避免使用player.prepare(),而是使用player.prepareAsync(); (或)將邏輯保存在單獨的線程中。 (你可以使用intent服務,AsyncTask等)

2)也嘗試使用靜態構造函數MediaPlayer.create(Uri);