0

我已經編寫了自己的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

does logcat sais something? –

+0

對我沒有興趣,但我會仔細看看。只是想知道是否有人看到我在處理媒體播放器時顯然做錯了什麼,可能會導致它。 – Josh

回答

0

我也有類似的問題,但我的成功和失敗後釋放。這是基本的代碼。在你的情況下,添加成功和錯誤處理程序如下。我不明白爲什麼你會在playMedia()期間調用stop(),但只有當用戶單擊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();