Android MediaPlayer无法在线播放音频文件,但如果从本地加载相同的文件,则工作正常

Android MediaPlayer无法在线播放音频文件,但如果从本地加载相同的文件,则工作正常,android,audio,media-player,android-mediaplayer,Android,Audio,Media Player,Android Mediaplayer,当我使用android MediaPlayer从服务中播放一些音频流时,发生了一些奇怪的事情。以下是我的音频流url: 当我将其与MediaPlayer一起使用时,如下所示: mediaPlayer.setDataSource("http://7xk2r8.com1.z0.glb.clouddn.com/rNeDSn1Octc") mediaPlayer.setDataSource("local path") 将立即调用onCompleteListener 但是如果我从上面的url下载文件到

当我使用android MediaPlayer从服务中播放一些音频流时,发生了一些奇怪的事情。以下是我的音频流url: 当我将其与MediaPlayer一起使用时,如下所示:

mediaPlayer.setDataSource("http://7xk2r8.com1.z0.glb.clouddn.com/rNeDSn1Octc")
mediaPlayer.setDataSource("local path")

将立即调用onCompleteListener

但是如果我从上面的url下载文件到android设备上,并使用MediaPlayer从本地加载,如下所示:

mediaPlayer.setDataSource("http://7xk2r8.com1.z0.glb.clouddn.com/rNeDSn1Octc")
mediaPlayer.setDataSource("local path")
一切正常

我想这些bug可能来自流文件本身,但我不知道为什么,我已经在其中迷失了大约2周,救命啊


PS:我为MediaPlayer使用了最简单的代码,因此我认为我的代码没有问题,我确信音频流文件本身存在缺陷,你能测试该文件吗?上面的文件URL是完全公开的。谢谢

我也有同样的问题。由于网络代理等原因,Mediaplayer有时无法加载。您可以调用prepareAsync(),但它永远不会调用onPrepared()。因此,我添加了一个布尔标志,如下所示:

@Override
public void onPrepared(MediaPlayer mp) {
    isPrepared = true;}

@Override
public void onCompletion(MediaPlayer mp) {
    if(isPrepared) {// Do your code}

在mediaPlayer启动后,将立即调用onCompleteListener。android版本为22