我已成功使用Media Player播放許多網址提供音頻/廣播流,但我已經發現了一些特殊情況,它不工作, 媒體播放器永遠不會達到onPrepared。我已經用VLC測試了他們打得很好,格式正確。廣播流失敗在某些URL
甚至,我檢查如果我在這裏做了一個像這裏評論的緩存http://blog.pocketjourney.com/2008/04/04/tutorial-custom-media-streaming-for-androids-mediaplayer/它的工作原理,數據下載和MediaPlayer可以播放它之後。
沒玩過的網址是:
http://makrodigital.com:8014/forever?type=.mp3
http://makrodigital.com:8014/radioforevermusic?type=.mp3
代碼:
private void prepareAndPlay() {
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setOnPreparedListener(this);
player.setOnErrorListener(this);
player.setOnBufferingUpdateListener(this);
player.setOnInfoListener(this);
try {
player.setDataSource(getActivity().getBaseContext(),Uri.parse(getURL()));
player.prepareAsync();
} catch (Exception e) {
Log.e(TAG," Setting data source " + getParam(),e);
buildErrorPopup();
return;
}
}
// In the problematic URLs it is never called
@Override
public void onPrepared(MediaPlayer mp) {
try {
mp.start();
} catch(Exception e) {
e.printStackTrace();
}
}
如果ALSA有測試此沒有運氣:
//Setting HTTP header for fixing some issues with normal setDataSource Header from Android
//User-Agent "iTunes" was set to force re-direct to shoutcast streaming url
Map<String, String> headers = new HashMap<String, String>();
headers.put("User-Agent", "iTunes");
player.setDataSource(getActivity().getBaseContext(), Uri.parse(getParam()), headers);
的問題是,這是沒有辦法使用的MediaPlayer直接播放這個網址,以避免工具的複雜性,在所有可能的escenarios工作的緩存?
如果看到有低水平媒體API這裏,Best practices for audio streaming。
檢查logcat是否有任何可能指示什麼是通過OnErrorListener和OnInfoListener實現出錯。 – petey
避免使用'e.printStackTrace();'在機器人的項目,而是使用了Android SDK提供日誌類[LOG](http://developer.android.com/reference/android/util/Log.html)...像'Log.e( 「TAG」,e.getMessage(),E);' – petey
@petey,我已經確認並沒有錯誤報道沒有任何更多信息。它正在等待開始。關於.printStackTrace(),你是對的,我避開它們,它是自動生成的測試代碼。 –