使用VideoView的无缝视频循环

Sam*_*ley 79 android android-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();
    }
}
Run Code Online (Sandbox Code Playgroud)

该剪辑只有22秒长,但创建为无缝,因此可以毫无延迟地工作.

Pra*_*dia 205

试试这个它将100%工作


videoView.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.setLooping(true);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • @PravinDodia感谢您的信息.是的,我使用了流视频.我在MediaPlayer.OnCompletionListener()中使用了vv.start()而不是循环. (2认同)

Chi*_*lra 6

在 Kotlin 中只需使用

videoView.setOnPreparedListener { it.isLooping = true }
Run Code Online (Sandbox Code Playgroud)


Com*_*are 5

暂停用于底层MediaPlayer刷新其缓冲区。所需的时间取决于许多因素,其中许多因素是您无法控制的(例如,CPU速度,板载闪存的速度)。

您可以控制的一种方法是将视频移出资源并进入文件系统。资源存储在APK(ZIP文件)中,因此以这种方式提取视频可能会花费额外的时间。

您可能需要离开VideoViewSurfaceView在两个MediaPlayers之间交替使用-一个正在播放,而另一个正在准备中,因此当一个播放结束时,您可以切换到新播放器。我没有尝试过,所以我不知道可能会有什么后果。但是,我知道此技术经常用于音频播放,以从一个剪辑过渡到另一个剪辑。


小智 5

不确定几年后是否有帮助,但是我使用了

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

 @Override 
  public void onCompletion(MediaPlayer mediaPlayer) {   
    vv.start();
  }
});
Run Code Online (Sandbox Code Playgroud)

它有一个无缝循环