【问题标题】:Android MediaPlayer not returning from prepareAsyncAndroid MediaPlayer 未从 prepareAsync 返回
【发布时间】:2015-01-26 18:25:13
【问题描述】:

我在使用特定 URI 启动 MediaPlayer 的 Logcat 中得到以下信息。通常,每个 Uri,无论好坏,都会播放或返回错误,除了这个特定的错误。

I/MPS﹕ PrepAsync started
V/MediaPlayer﹕ message received msg=8, ext1=0, ext2=0
V/MediaPlayer﹕ unrecognized message: (8, 0, 0)
V/MediaPlayer﹕ callback application
V/MediaPlayer﹕ back from callback

...然后挂在那里。

我真的只是在研究如何在错误处理程序中捕获此对话,但如果有人知道实际问题,那就更好了。

源代码FWIW:

mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
            mediaPlayer.start();
        }
    });
}

try {
    mediaPlayer.setDataSource(sUrl);
    mediaPlayer.prepareAsync();
} catch (Exception e) {
    Log.d(TAG, "Exception:"+e;
}

另外,我尝试过创建 OnInfoListener、OnError 和 OnBufferingUpdateListener。这些永远不会被调用。似乎 mediaPlayer 只是在 onPrepareAsync 期间消失了。

如果有人想玩这个,这里是 URL。

http://54.196.206.122/entercom-koitfmaac-64

我只是将其复制/粘贴到 VLC 以验证链接是否有效。

更新:在看了更多之后,如果我等待的时间足够长,最终我会得到这个:

I/dalvikvm﹕ threadid=3: reacting to signal 3
I/dalvikvm﹕ Wrote stack traces to '/data/anr/traces.txt'

更新:Shubhang Malviya 指出的这个问题是我需要将 URI.parse 用作:

mMediaPlayer.setDataSource(mContext, Uri.parse("http://54.196.206.122/entercom-koitfmaac-64"));

【问题讨论】:

  • 此代码不足以识别您的问题。
  • 发布你的源代码
  • @JonhSmith 我已经尝试使用你的网址,我的 onPrepared() 被调用

标签: android error-handling media-player


【解决方案1】:

我认为如果我分享我的实现会很好:

尝试以下方式初始化您的媒体播放器

try {
                    mMediaPlayer = new MediaPlayer();
                    mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mMediaPlayer.setOnPreparedListener(this);
                    mMediaPlayer.setOnCompletionListener(this);
                    mMediaPlayer.setOnErrorListener(this);
                    mMediaPlayer.setOnBufferingUpdateListener(this);
                    mMediaPlayer.setOnInfoListener(this);
                    mMediaPlayer.setOnSeekCompleteListener(this);
                    mMediaPlayer.setDataSource(mContext, Uri.parse("http://54.196.206.122/entercom-koitfmaac-64"));
                    mMediaPlayer.prepareAsync();
                } catch (IOException e) {
                 // reset media player
                }

我的onPrepared(MediaPlayer mp) 在几秒钟后被调用,它正在播放你的音乐文件。

也仅供参考“无法在客户端打开文件,尝试服务器端”不是错误消息,而是来自 MediaPlayer 的调试消息。 Logcat 在尝试播放网络视频流时总是这样说。

【讨论】:

  • 是的,我认为问题在于我没有使用 Uri.parse。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 2016-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多