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