我已成功使用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(),你是对的,我避开它们,它是自动生成的测试代码。 –