我编写了自己的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();
}
}
答案 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();