2011-09-28 56 views
2

我有一個內置API級別爲2.2的應用程序。此應用程序包含一個視頻,該視頻在其啓動後立即開始播放。視頻在VideoView中播放,實際的視頻文件存儲在我的內部存儲器中(我的應用程序包的文件目錄)。VideoView/MediaPlayer錯誤(1,-18)

大多數情況下,它啓動就好了。但偶爾我會彈出一個錯誤提示,提示「對不起,此視頻無法播放。」並有一個Ok按鈕。只要按下ok按鈕,視頻就會開始正確播放。我需要弄清楚是什麼導致了這個錯誤,或者至少我怎麼能夠捕捉到它的任何錯誤,並且再次嘗試,因爲在我點擊確定後它總是完美的。當這個錯誤框顯示我看到這些消息的日誌裏面:

ERROR/PVOMXAudDecNode(21215): Ln 2232 OMX_EventError nData1 -2147479547 nData2 0 
ERROR/PlayerDriver(21215): Command PLAYER_PREPARE completed with an error or info -18 
ERROR/MediaPlayer(9282): message received msg=100, ext1=1, ext2=-18 
ERROR/MediaPlayer(9282): error (1, -18) 
ERROR/MediaPlayer(9282): callback application 
ERROR/MediaPlayer(9282): back from callback 
ERROR/MediaPlayer(9282): Error (1,-18) 
DEBUG/VideoView(9282): Error: 1,-18 

我在哪裏可以找到一個參考,究竟錯誤代碼-18指示?有沒有人有任何建議,我可以嘗試阻止它發生在第一個地方。我只在Sprint Epic 4g上觀察到這個錯誤。

編輯:以及據我所知,沒有例外正在拋給我。我假設發生的事情是視頻視圖知道捕捉異常造成的任何異常,並拋出彈出窗口。在我的日誌裏面沒有異常堆棧跟蹤,只是對-18錯誤的引用。

至於我如何打電話準備。我用這個:

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer arg0) { 
      mVideoView.start(); 
     } 
    }); 

這:

mVideoView.setVideoPath(file.getAbsolutePath()); 

它調用準備爲setVideoPath的一部分(我假設它確實是這樣,但是這種方法是無證)。這導致onPrepared在我的監聽器中被調用。

編輯2:現在我剛剛加入onErrorListener像這樣:

編輯IMORTANT!此代碼將在ICS上的infinte錯誤循環中。對於ICS設備,我取出了setPath調用,並返回false。它再次嘗試一次,併成功。

mVideoView.setOnErrorListener(new OnErrorListener(){ 

     @Override 
     public boolean onError(MediaPlayer arg0, int arg1, int arg2) { 
      Log.i(myTag, "MP ERROR: "+ arg1 + " - " + arg2); 
      mVideoView.setVideoPath(file.getAbsolutePath()); 
      return true; 
     } 

    }); 

此捕獲錯誤,我可以在我的日誌時發生此錯誤是ARG2 = -18看到。我只是讓它重試並返回true,所以它不會拋出對話框。到目前爲止,我從來沒有看到它連續兩次失敗,所以這總是正確地啓動視頻,並且不會造成無限循環。

我仍然非常感興趣,如果任何人都可以告訴我究竟是什麼錯誤代碼-18表示。

回答

1

您如何捕獲prepare()引發的潛在異常?你是否特意抓到IOException,然後重試撥打prepare()

嘗試使用prepareAsync()而不是在播放器準備好時阻止並調用監聽器。另外它不會丟IOException

+0

有關更多詳細信息,請參閱編輯。 – FoamyGuy

0

如果您在Froyo或Gingerbread上運行它,問題可能是您的設備不支持播放該文件。較低版本不支持使用基準格式以外的格式編碼的視頻。您可以在PC上使用一些工具,如視頻信息,並檢查文件是否爲基準格式。