2011-01-20 97 views
60

我有以下代碼將視頻作爲原始資源,啓動視頻並循環播放,但我需要視頻在截至剪輯結束時以無縫方式循環播放,並啓動剪輯再次之間的過渡導致閃爍一瞬間,這是我真的不能爲我的應用程序。無縫視頻循環與VideoView

public class Example extends Activity { 
    VideoView vv; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     vv = (VideoView)findViewById(R.id.VideoView01); 

     //Video Loop 
     vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
      public void onCompletion(MediaPlayer mp) { 
       vv.start(); //need to make transition seamless. 
      } 
     }); 

     Uri uri = Uri.parse("android.resource://com.example/" 
       + R.raw.video); 

     vv.setVideoURI(uri); 
     vv.requestFocus();  
     vv.start(); 
    } 
} 

該剪輯只有22秒長,但被創建爲無縫,因此可以毫不拖延地工作。

回答

149

試試這個它的工作100%


videoView.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mp.setLooping(true); 
    } 
}); 
+0

仍然拒絕每一個循環,它不像以前的方法那樣流暢 – Pencilcheck 2013-12-29 21:04:15

4

暫停是爲底層MediaPlayer刷新其緩衝區。需要多長時間將取決於許多因素,其中許多因素不在您的控制之下(例如,CPU的速度,機載閃存的速度)。

你可以控制的是讓你的視頻離開資源進入文件系統。資源存儲在APK中,這是一個ZIP文件,因此以這種方式提取視頻可能需要額外的時間。

您可能需要從VideoView切換出來,並使用帶有兩個MediaPlayersSurfaceView,他們之間的交流 - 一個是而未來正準備打的,所以當玩了一結束,你可以切換到新的球員。我沒有嘗試過,所以我不知道可能會有什麼後果。但是,我知道這種技術經常用於音頻回放從一個片段轉換到另一個片段。

+0

如果我沒有記錯,MediaPlayers扶住surfaceViews時刻準備的時候,所以當一個人正在使用它,你不能準備另一媒體播放器。 – Edison 2014-03-17 18:18:47

0

對此的解答是從視頻中刪除音頻並將其轉換爲可以無縫循環的.ogg文件,然後使用沒有音頻的視頻循環播放,並且可以工作。

1

有點晚了,但任何原因,你不能使用以下?

MediaPlayer.setLooping(true); 
+1

這是很久以前的事了,但我認爲當週圍環繞聲被調用時,視頻中出現明顯的停頓。 – SamRowley 2011-07-18 07:52:53

1

不知道這幫助多年後,但我用

vv.start(); 
vv.setOnCompletionListener (new MediaPlayer.OnCompletionListener() { 

@Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
    vv.start(); 
    } 
}); 

,它有一個無縫循環