我有一個內置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表示。
有關更多詳細信息,請參閱編輯。 – FoamyGuy