Android MediaPlayer 未从 prepareAsync 返回

标签 android error-handling media-player

我在使用特定 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"));

最佳答案

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

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

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 总是这样说。

关于Android MediaPlayer 未从 prepareAsync 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27182805/

相关文章:

java - "Spring Boot Project"错误 : Could not find or load main class fyp. fms.FleetManagementSystemApplication

iphone - 在 iOS 媒体播放器 Controller 中禁用全屏模式

android - 生命周期配置错误未涵盖的插件执行

android - 任何人都可以帮助我了解我的程序的线程吗?

android - 无法对非静态方法 findviewbyid(int) TextView 进行静态引用

android - Proguard 保持类(class)成员

haskell - 富有表现力和可组合的错误类型

go - 限制变量存储错误的范围

java - Cursor getContentResolver().query MediaStore 未获取最新添加的音频文件

iphone - 从另一个应用程序控制 iPod?