我可以通過執行OnCompletionListener來精確地播放視頻,以將數據源設置爲不同的文件。那裏沒有問題。我打電話reset()和prepare()就好。Android:MediaPlayer無縫或無縫視頻播放
我無法弄清楚的是如何擺脫數據源更改和新視頻啓動之間的1-2秒間隔屏幕閃爍。差距顯示黑屏,我還沒有找到任何方法來解決它。
我試着將父視圖的背景設置爲圖像,但它設法繞過。即使SurfaceView是透明的(這是默認情況下)。我也嘗試同時播放多個視頻文件,並在一個結束時切換mediaplayer的顯示,另一個應該開始。
我試過的最後一件事是在視頻「準備」時臨時顯示的背景中顯示第二個視圖,並在視頻準備開始時將其刪除。這也不是非常無縫。
有沒有什麼辦法擺脫這種差距。在一個循環中運行一個視頻奇妙地工作,並且正是我想要的,除了它正在通過相同視頻觀看,而不是播放我選擇的其他視頻。
public class Player extends Activity implements
OnCompletionListener, MediaPlayer.OnPreparedListener, SurfaceHolder.Callback {
private MediaPlayer player;
private SurfaceView surface;
private SurfaceHolder holder;
public void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.main);
surface = (SurfaceView)findViewById(R.id.surface);
holder = surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void onCompletion(MediaPlayer arg0) {
File clip = new File(Environment.getExternalStorageDirectory(),"file2.mp4");
playVideo(clip.getAbsolutePath());
}
public void onPrepared(MediaPlayer mediaplayer) {
holder.setFixedSize(player.getVideoWidth(), player.getVideoHeight());
player.start();
}
private void playVideo(String url) {
try {
File clip = new File(Environment.getExternalStorageDirectory(),"file1.mp4");
if (player == null) {
player = new MediaPlayer();
player.setScreenOnWhilePlaying(true);
}
else {
player.stop();
player.reset();
}
player.setDataSource(url);
player.setDisplay(holder);
player.setOnPreparedListener(this);
player.prepare();
player.setOnCompletionListener(this);
}
catch (Throwable t) {
Log.e("ERROR", "Exception Error", t);
}
}
雖然這已經發布了一段時間後,我面臨同樣的問題。即使使用videoview,在切換視頻時我仍然存在差距。有沒有其他方法可以解決這個問題? – dulys 2011-10-21 12:37:26