播放几个不同的文件后,音频停止工作

时间:2014-05-10 00:55:35

标签: android android-mediaplayer cordova-plugins apk-expansion-files

我编写了自己的cordova插件,用于处理从扩展文件加载媒体。我还建立了自己对播放音频的基本支持,但几分钟后播放多个音频文件时遇到了一些问题。

发生的事情是前10-20个音频文件没有问题,但它会停止播放而没有任何明显的错误。如果我等待几分钟,有时音频会返回。这让我觉得我没有妥善处理。

项目文件: https://github.com/mcfarljw/cordova-plugin-expansion/blob/master/src/android/Expansion.java

以下是我与媒体播放器互动的片段:

@Override
    public void onPrepared(MediaPlayer media) {
        media.start();
    }

    public void pauseMedia() {
        if (media != null && media.isPlaying())
            media.pause();
    }

    public void playMedia(String filename) throws IOException {
        if (!this.isPlaying()) {
            Log.e("EXPANSION", "Media is currently playing!");
        }
        if (expansionFile == null) {
            Log.e("EXPANSION", "Expansion file not found!");
        }
        AssetFileDescriptor file = expansionFile
                .getAssetFileDescriptor(filename);
        if (file == null) {
            Log.e("EXPANSION", "Filename '" + filename + "' not found!");
        }
        if (media != null) {
            media.stop();
            media.release();
        }
        media = new MediaPlayer();
        media.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
                file.getLength());
        media.setOnPreparedListener(this);
        media.prepareAsync();
    }

    public void stopMedia() {
        if (media != null && media.isPlaying()) {
            media.release();
            media.stop();
        }
    }

1 个答案:

答案 0 :(得分:0)

我有类似的问题,但是在成功和失败之后我会发布。这是基本代码。在您的情况下,添加成功和错误处理程序,如下所示。我不明白为什么你会在playMedia()期间调用stop(),但前提是用户点击停止。

     media = new Media(url,
     function () { console.log("playAudio():Audio Success"); 
     if (media != null) media.release(); },
     function (err) { console.log("playAudio():Audio Error: " + err); 
     if (media != null) media.release(); }
     );

     media.play();