VideoView无缝video循环

我有以下代码将video作为原始资源,启动video并循环播放,但是我需要video在到达剪辑结束时以无缝方式进行循环,并再次启动剪辑,闪烁一瞬间,我真的不能为我的应用程序。

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秒长,但创build是无缝的,所以可以毫不拖延地工作。

试试这个可以100%


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

暂停是为底层MediaPlayer刷新其缓冲区。 需要多长时间将取决于许多因素,其中许多因素在您的控制之外(例如CPU的速度,板上闪存的速度)。

你可以控制的是把你的video从资源中移出到文件系统中。 资源存储在APK中,这是一个ZIP文件,所以以这种方式提取video可能需要额外的时间。

您可能需要从VideoView切换到两个MediaPlayers ,并在它们之间交替使用SurfaceView – 一个在下一个正在准备的时候播放,所以当播放结束时,您可以切换到新的播放器。 我没有尝试过,所以我不知道可能会有什么后果。 但是,我知道这种技术经常用于audio回放从一个片段转换到另一个片段。

迟到了,但是你不能使用以下任何理由?

 MediaPlayer.setLooping(true); 

回答是从video中删除audio并将其转换为可以无缝循环的.ogg文件,然后使用无audio的video循环播放。

这里是回答的朋友,你必须在setOnCompletionListener类中使用vv.resume

[ https://stackoverflow.com/a/27606389/3414469%5D [1 ]