某些URL无线电流失败

时间:2013-11-20 16:08:47

标签: android audio streaming android-mediaplayer

我已成功使用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

1 个答案:

答案 0 :(得分:0)

我注意到这个问题相当陈旧,但仍然没有答案。永远不会调用onPrepared()对象的MediaPlayer方法,因为数据源很糟糕且无法准备。有时流媒体广播电台链接因任何原因而脱机,这不是代码的错误。如果链接不好,那就很糟糕,就是这样。设置一个onErrorListener()来观察并处理错误,让用户知道存在问题并继续使用您的代码(即播放下一个链接或退出。)