Seamless video Loop with VideoView

AndroidAndroid Videoview

Android Problem Overview


I have the following code to take a video as a raw resource, start the video and loop it but I need the video to loop seamlessly as of now when it comes to an end of the clip and starts the clip again the transition between causes a flicker for a split second, which I really can't have for my app.

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();
    }
}

The clip is only 22 seconds long but was created to be seamless so it is possible to work without the delay.

Android Solutions


Solution 1 - Android

Try this it will work 100%


VideoView videoView;<---write this in outside of method or else declare it as final variable.

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

Solution 2 - Android

In Kotlin simply use

videoView.setOnPreparedListener { it.isLooping = true }

Solution 3 - Android

Not sure if this helps years later, but I used

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

and it has a seamless loop

Solution 4 - Android

The pause is for the underlying MediaPlayer to refresh its buffers. How long that will take will depend on a number of factors, many of which are outside your control (e.g., speed of CPU, speed of on-board flash storage).

One you can control is to get your video out of the resource and into the filesystem. Resources are stored in the APK, which is a ZIP file, so extracting the video this way probably takes extra time.

You may need to switch away from VideoView and use a SurfaceView with two MediaPlayers, alternating between them -- one is playing while the next is preparing, so when the playing one ends you can switch to the new player. I have not tried this, and so I do not know what the ramifications might be. However, I know that this technique is frequently used for audio playback to transition from one clip to another.

Solution 5 - Android

Little late, but any reason that you can't use the following?

MediaPlayer.setLooping(true);

Solution 6 - Android

If you are using Kotlin

 videoView.setOnPreparedListener(object : MediaPlayer.OnPreparedListener {
                override fun onPrepared(mp: MediaPlayer?) {
                    //Start Playback
                    videoView.start()
                    //Loop Video
                    mp!!.isLooping = true;
                    Log.i(TAG, "Video Started");
                }
            });

Using Arrow Expression short form

videoView.setOnPreparedListener { mp ->
            //Start Playback
            videoView.start()
            //Loop Video
            mp!!.isLooping = true;
            Log.i(TAG, "Video Started");
        };

Solution 7 - Android

Answer to this is to remove the audio from the video and convert that to a .ogg file which can be looped seamlessly and then use the video without audio to loop round and this works.

Solution 8 - Android

Here is answer friends, you must use vv.resume in setOnCompletionListener class

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSamRowleyView Question on Stackoverflow
Solution 1 - AndroidPravinDodiaView Answer on Stackoverflow
Solution 2 - AndroidChirag KalraView Answer on Stackoverflow
Solution 3 - Androidlexodus kView Answer on Stackoverflow
Solution 4 - AndroidCommonsWareView Answer on Stackoverflow
Solution 5 - AndroidJ JView Answer on Stackoverflow
Solution 6 - AndroidHitesh SahuView Answer on Stackoverflow
Solution 7 - AndroidSamRowleyView Answer on Stackoverflow
Solution 8 - Androidylmzekrm1223View Answer on Stackoverflow