2012-06-04 134 views
0

我的問題是有太多MediaPlayers導致IOException preparefailed:status = 0x1來登錄嗎?MediaPlayer準備失敗IOException

我的程序運行的方式是我爲每個要播放的視頻使用一個單獨的媒體播放器實例。在運行結束時,我停止videoPlayer,釋放它,並將其變爲空;這有時候可以,但是在其他時候,當我在視頻太快之間移動時,我得到一個IO異常,並且視頻不能播放。我還有一個mediaPlayer在服務中播放一些背景音樂。

基本上我的視頻活動每次文件結束播放時都會收到新的呼叫。這可能是錯誤,我應該嘗試只用一個不同的文件重複使用相同的媒體播放器?

在此先感謝

回答

1

我找到了我自己的答案。我不知道這是否是一個好方法,但是:

if(videoFile != null) 
     { 
      Log.i("INITPLAYER", videoFile); 
      afd = getAssets().openFd(videoFile); 

      instructionVideoPlayer = new MediaPlayer(); 

      instructionVideoPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength()); 

      instructionVideoPlayer.setDisplay(holder); 

      instructionVideoPlayer.prepare(); 

      instructionVideoPlayer.setOnCompletionListener(instructionVideoComplete); 
      instructionVideoPlayer.setOnPreparedListener(this); 
     } 
     else 
      Log.i("VideoPlayer", "noVideoFile"); 

    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     Log.i(this.toString(), "IOEXception"); 
     e.printStackTrace(); 

//Here is the fix: 
     instructionVideoPlayer.release(); 
     instructionVideoPlayer = null; 
     initPlayer(); 
// reinit after prepare failed. although this can bring in an infinte loop if video file does not exits 
    } catch (Exception e) 
    { 
     Log.i("InitPlayer", e.getClass().toString()); 
     e.printStackTrace(); 
    } 
+0

這真的對我也有幫助。只是叫釋放。 ! – png

相關問題