I know that similar questions have been asked before but none has been able to solve this specific problem, they only solve parts of it.
I want to achieve the following:
- We have a bunch of videos. Let's call them
video1
,video2
,video3
,video4
andvideo5
. - The videos play in an ordered sequence which is repeated in an endless loop - so after
video1
is finished,video2
is played, thenvideo3
,video4
,video5
and then it starts again fromvideo1
. - The starting point must be random. So this whole sequence should start from a randomly selected video in the list but then go through the rest of the list in the normal order. If it randomly selects to start with
video3
, it would then go on to playvideo4
,video5
,video1
,video2
etc. - The playback of the sequence has to start automatically without any user input.
- Now this last point is the most difficult one: There must be no gap in between the play of each video.
I have been able to write a code that does everything from the point 1 to 4 but I can not get it to solve point 5!
Here is my code. I have set the background-color
of the video to red
to make the gap between the videos visible - you will be able to see a red flash between the playback of each video. This is what I need to solve: I need that split second gap to be gone, so that the playback will be absolutely seamless.
var vidElement = document.getElementById('video');
var vidSources = [
"http://www.w3schools.com/html/mov_bbb.mp4",
"http://www.w3schools.com/html/movie.mp4"
];
var activeVideo = Math.floor((Math.random() * vidSources.length));
vidElement.src = vidSources[activeVideo];
vidElement.addEventListener('ended', function(e) {
// update the active video index
activeVideo = (++activeVideo) % vidSources.length;
if(activeVideo === vidSources.length){
activeVideo = 0;
}
// update the video source and play
vidElement.src = vidSources[activeVideo];
vidElement.play();
});
video { background-color: red }
<video src="http://www.w3schools.com/html/mov_bbb.mp4" id="video" autoplay muted playsinline></video>
<p>(each video is just ~ 10 seconds)</p>