MediaPlayer无法正常播放音频

时间:2010-12-31 08:56:37

标签: android media-player

我正在尝试从WebView播放背景音频。此音频由URL提供。我通过覆盖网址加载来解决这个问题。它开始播放音频,但很多时候媒体播放器停止播放。这种情况发生在大约30%的时间,而且这个音频文件永远不会超过30秒。

我尝试过使用MP3,OGG和WAV,它们都适用于它们。

我也试过但首先下载文件然后播放它,而不是流式播放,但也不起作用。

这是一段代码......向您展示它的工作原理:

public boolean shouldOverrideUrlLoading(WebView view, String url) {
    if (url.endsWith(".ogg")){
        AudioLoader audioLoader = new AudioLoader(url);
        audioLoader.start();
        return true;
    }
    else if (url.endsWith(".wav")){
        Uri tempPath = Uri.parse(url);
        MediaPlayer player = MediaPlayer.create(interfazWeb, tempPath);
        if (player != null){
            player.start();
        } else {
            Log.e(TAG, "No se puede abrir el audio:" + url);
        }
        return true;
    }
    else if (url.endsWith(".mp3")){
        AudioLoader audioLoader = new AudioLoader(url);
        audioLoader.start();
        return true;
    }else{
        return super.shouldOverrideUrlLoading(view, url);
    }
}

我检查过“AudioLoader”保存的音频文件,完全没问题。 WAV案例正在使用我的第一次尝试,用流媒体播放。

还试过SoundPool和AsyncPlayer ......什么都行不通!!

所以......到目前为止,我认为这不是通信,编解码器或缓冲区问题。我唯一的提示是这些日志条目,每次问题发生时都会重复,包括所有格式和所有方法:

12-31 09:41:49.284: WARN/AudioFlinger(59): write blocked for 160 msecs, 20 delayed writes, thread 0xd7a8
12-31 09:41:49.554: WARN/TimedEventQueue(59): Event 6 was not found in the queue, already cancelled?

请有人提一些线索吗?或者我只是面临一个错误/失误。

2011年开心,特别是如果你能帮助我的话:P

问候,曼努埃尔。

1 个答案:

答案 0 :(得分:3)

您正在以本地方式创建audioLoader和/或MediaPlayer对象(这些对象是函数shouldOverrideUrlLoading的本地对象)。因此,一旦退出该函数,当垃圾收集器尝试收集所有未引用的对象时,它将破坏您的对象,然后声音将停止。

尝试将AudioLoader和MediaPlayer对象声明为全局对象:

private AudioLoader audioLoader; 
private MediaPlayer player; 
public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.endsWith(".ogg")){
            audioLoader = new AudioLoader(url);
            audioLoader.start();
            return true;
        }
        else if (url.endsWith(".wav")){
            Uri tempPath = Uri.parse(url);
            player = MediaPlayer.create(interfazWeb, tempPath);
            if (player != null){
                player.start();
            } else {
                Log.e(TAG, "No se puede abrir el audio:" + url);
            }
            return true;
        }
        else if (url.endsWith(".mp3")){
            audioLoader = new AudioLoader(url);
            audioLoader.start();
            return true;
        }else{
            return super.shouldOverrideUrlLoading(view, url);
        } 
}