我已成功使用Media Player播放许多提供音频/广播流的Url,但我发现了一些不起作用的特殊情况, 媒体播放器永远不会达到准备。我用VLC进行了测试,他们玩得很好,格式正确。
即便如此,我已经检查过,如果我按照这里评论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直接播放此URL,以避免在所有可能的方案中实现缓存的复杂性?
如果我们在这里看到了一个低级媒体API,Best practices for audio streaming。
答案 0 :(得分:0)
我注意到这个问题相当陈旧,但仍然没有答案。永远不会调用onPrepared()
对象的MediaPlayer
方法,因为数据源很糟糕且无法准备。有时流媒体广播电台链接因任何原因而脱机,这不是代码的错误。如果链接不好,那就很糟糕,就是这样。设置一个onErrorListener()
来观察并处理错误,让用户知道存在问题并继续使用您的代码(即播放下一个链接或退出。)