【问题标题】:MediaPlayer not playing audio properlyMediaPlayer 无法正确播放音频
【发布时间】:2010-12-31 08:56:36
【问题描述】:

我正在尝试从 WebView 在后台播放音频。此音频由 URL 提供。我通过覆盖 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

问候,曼努埃尔。

【问题讨论】:

    标签: android media-player


    【解决方案1】:

    您正在以本地方式创建 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);
            } 
    }
    

    【讨论】:

    • 嗯,听起来很有趣,我会在星期一尝试,Gracias Jesus!
    • 这是我到这里时第一次尝试... 20 分钟前,到目前为止,它似乎工作得很好!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多