其他分享
首页 > 其他分享> > android-MediaPlayer无法正确播放音频

android-MediaPlayer无法正确播放音频

作者:互联网

我正在尝试在WebView中播放音频.该音频由URL提供.我通过覆盖url加载来解决这个问题.它开始播放音频,但是很多时候Media Player都停止了.这种情况发生的时间大约为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

问候,曼努埃尔.

解决方法:

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

标签:media-player,android
来源: https://codeday.me/bug/20191208/2094632.html