我有一個VideoView應用程序,它會一直循環播放相同的視頻,直到用戶對設備執行某些操作(觸摸屏等)當前我正在使用OnCompletionListener()來重新啓動視頻一旦結束。這適用於我測試過的每個設備,除了三星補貨。VideoView循環視頻補充
這裏是我的代碼:
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mVideoView.setVideoPath(file.getAbsolutePath());
mVideoView.start();
}
});
在補貨,會發生什麼是視頻播放一路走過一次,但然後永遠不會再次啓動,屏幕會全黑(但背光仍然打開)。在我使用完全相同的代碼測試過的每個其他設備上,它都能夠重複播放視頻。有誰知道任何具體的補充可能會導致此錯誤?我想可能延遲了setVideoPath()的調用,並且啓動()200到300ms可能會有所幫助,但這沒有任何影響。我在這裏真的很茫然。
我看到在我記錄這些消息:
ERROR/QCvdec(87):OMX沖洗時VDEC尚未初始化發出。
ERROR/QCvdec(87):OMXCORE-SM:收到命令DISABLE(2)
ERROR/QCvdec(87):OMX沖洗時VDEC尚未初始化發出。
ERROR/QCvdec(87):OMXCORE-SM:收到命令ENABLE(3)
但是,這些日誌發生既當視頻開始(第一次它起着),並且當無法啓動再次。所以我不知道,如果他們都跟我的問題
編輯:
我只是試圖設置mVideoView爲空,然後setVideoPath前右側獲得一個新的參考其與findViewById()()。我知道這會使OnCompletionListener的設置複雜化。但無論如何它仍然無法工作,仍然是同一個黑屏。
編輯2:
我開始注意到,有時視頻甚至不啓動的第一次。我使用這些相同的兩行啓動它的第一次:
mVideoView.setVideoPath(file.getAbsolutePath());
mVideoView.start();
它似乎更consistantly開始,但其第一次被播放時不太100%。
編輯3:這是我現在設置的方式。我手動設置OnPreparedListener爲我啓動視頻。所以我說這對我的onCreate()
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer arg0) {
mVideoView.start();
}
});
後來,當我準備重新啓動視頻我就叫只有setVideoPath()方法,就像這樣:
mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
mVideoView.setVideoPath(file.getAbsolutePath());
}
});
這似乎是在做訣竅。我讓它運行一段時間來確定,但肯定。
編輯4:
@MByD在用於VideoView setVideoPath()的代碼是用於setVideoUri一個包裝()。 setVideoURI()設置爲mStartWhenPrepared = false;
默認的OnPreparedListener檢查此開關以決定是否開始播放。這就是爲什麼它不以默認監聽器開始。我沒有更多地關注它,但可能有一個setter方法讓我將mStartWhenPrepared值更改爲true,這會導致視頻從默認偵聽器啓動。
有趣的問題。 – PedroAGSantos