【问题标题】:Radio Streaming fails in some URLs某些 URL 中的 Radio Streaming 失败
【发布时间】:2013-12-04 17:47:38
【问题描述】:

我已成功使用媒体播放器播放许多提供音频/无线电流的 Url,但我发现一些特殊情况下它不起作用, 媒体播放器永远不会到达 onPrepared。我已经用 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

【问题讨论】:

  • 通过您的 OnErrorListener 和 OnInfoListener 实现检查 logcat 是否有任何可能表明出现问题的内容。
  • 避免在android项目中使用e.printStackTrace();,而是使用android sdk提供的日志类LOG ...类似于Log.e("TAG", e.getMessage(), e);
  • @petey ,我已经检查过了,没有报告任何错误,也没有任何进一步的信息。它正在等待开始。关于 .printStackTrace(),你是对的,我避免使用它们,它是自动生成的测试代码。
  • 哪个版本的android?
  • 我在 Android 4.1.2 中测试过。

标签: android audio streaming android-mediaplayer


【解决方案1】:

我注意到这个问题相当古老,但仍未得到解答。你的MediaPlayer 对象的onPrepared() 方法永远不会被调用,因为数据源是坏的,无法准备。有时流广播电台链接由于多种原因而脱机,这不是您的代码的错。如果链接不好,那就是坏的,仅此而已。设置一个onErrorListener() 来关注这一点并通过让用户知道存在问题并继续使用您的代码来处理错误(即播放下一个链接或退出。)

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2021-06-19
    • 2012-07-03
    • 2021-01-22
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多