我的第一篇文章在這裏。感謝大家,本網站對於學習Android編程非常有用。設置數據源後Stagefright媒體在2.2中延遲?
我有一個簡單的應用程序,加載一個MP3流並播放它。它在1.6和2.1上工作正常,但在2.2上它不太正確。看起來我的服務開始出現問題,它給了我一個ANR以及我必須點擊「等待」的對話框,然後服務開始。爲什麼服務需要很長時間才能啓動?
這裏是我的簡單的代碼,設置源和播放音頻:
public class MyActivityService extends Service {
MediaPlayer player = new MediaPlayer();
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
try {
player.setDataSource("URL OF MUSIC FILE");
} 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();
}
try {
player.prepare();
player.setVolume(1, 1);
player.setLooping(true);
player.start();
Toast.makeText(getApplicationContext(), "Audio Service Started.", Toast.LENGTH_SHORT).show();}
附錄:
原來這不是沒有開始我的服務,它是不是很快啓動音頻足夠在2.2 ...
當我的服務開始和停止時,我擺脫了ANRs,將我的服務的onCreate()
和onDestroy()
方法放在他們自己的線程中,這可能是從一開始它應該如何?對不起,只是學習。
但是,這是真正的問題延遲仍然存在,澄清 -
例如,我的代碼,因爲它是現在,工作非常愉快,只是我多麼希望它在2.1和2.2,當我數據源設置爲這樣一個MP3文件:http://dl.dropbox.com/u/6916184/TestSongStream.mp3
,但是當我的數據源設置爲音頻流的位置是這樣的:http://d.liveatc.net/kjfk_twr或這樣的:http://relay.radioreference.com:80/192236577它正常工作只在2.1。
在2.2的聲音也開始播放最後,但它需要「StagefrightPlayer」約25秒左右,如下所示,直到聲音開始設置數據源後:
07-31 02:54:30.176: INFO/StagefrightPlayer(34): setDataSource('http://relay.radioreference.com:80/192236577')
07-31 02:54:55.228: INFO/AwesomePlayer(34): calling prefetcher->prepare()
07-31 02:54:56.231: INFO/Prefetcher(34): [0x2cc28] cache below low water mark, filling cache.
07-31 02:54:56.337: INFO/AwesomePlayer(34): prefetcher is done preparing
07-31 02:54:56.347: DEBUG/AudioSink(34): bufferCount (4) is too small and increased to 12
07-31 02:54:57.337: ERROR/AwesomePlayer(34): Not sending buffering status because duration is unknown.
它也需要相同數量時間大約25秒,在我的服務的onDestroy()
方法中調用player.stop()
後停止媒體播放器,並且onDestroy()
方法繼續Toast消息並取消通知。
這只是它與2.2的方式嗎?如果是這樣,我可以解決延遲問題,這不是問題。或者更可能是我做錯了什麼?但它在1.6和2.1中完全符合我的需求!
會發布更多的代碼幫助嗎?
我的代碼很簡單。沒有音頻控制或類似的東西。只需一個開始音頻按鈕和停止音頻按鈕,即可開始和停止播放音頻流的服務。
謝謝你的幫助!
更新:我發現這個問題與我嘗試播放的特定音頻流有關。我嘗試了不同的流,它發揮得很好。什麼類型的音頻流可以在1.6和2.1中播放,但不在2.2中播放?我知道這是因爲在2.2媒體框架是不同的。如果沒有服務超時,我仍然需要能夠播放不工作的數據流!我應該嘗試什麼?謝謝你的幫助。 – ShadowGod 2010-07-29 07:18:55
請忽略我上面的更新評論,並參閱我原始問題中的附錄我想我已澄清了真正的問題。謝謝。 – ShadowGod 2010-07-31 08:27:15
我在我的應用程序中擊中了同樣的東西,@ShadowGod是否能夠爲此提出任何解決方案? – 2011-11-23 04:23:59