diff --git a/source/UI/js/Video/VideoElement.js b/source/UI/js/Video/VideoElement.js index 928580c1..72bdfac6 100644 --- a/source/UI/js/Video/VideoElement.js +++ b/source/UI/js/Video/VideoElement.js @@ -165,15 +165,33 @@ Ox.VideoElement = function(options, self) { }, progress: function() { // stop buffering if buffered to end point - if (self.video == this && self.buffering) { - var item = self.items[self.currentItem]; - Ox.range(self.video.buffered.length).forEach(function(i) { - if (self.video.buffered.start(i) <= item['in'] + var video = this, + item = self.items[self.currentItem], + nextItem = Ox.mod(self.currentItem + 1, self.numberOfItems), + next = self.items[nextItem], + nextVideo = self.$videos[Ox.mod(self.currentVideo + 1, self.$videos.length)][0]; + if (self.video == video && (video.preload != 'none' || self.buffering)) { + if (clipCached(video, item)) { + self.video.preload = 'none'; + self.buffering = false; + if (nextVideo != self.video) { + nextVideo.preload = 'auto'; + } + } + } else if (!self.buffering && nextVideo == video && video.preload != 'none') { + if (clipCached(video, next)) { + video.preload = 'none'; + } + } + function clipCached(video, item) { + var cached = false + Ox.range(video.buffered.length).forEach(function(i) { + if (video.buffered.start(i) <= item['in'] && self.video.buffered.end(i) >= item.out) { - self.video.preload = 'none'; - self.buffering = false; + cached = true } }); + return cached } }, seeking: function() { @@ -358,8 +376,8 @@ Ox.VideoElement = function(options, self) { if (self.$video.attr('src') != item.src) { self.loadedMetadata && Ox.Log('Video', 'caching next item failed, reset src'); self.video.src = item.src; - self.video.preload = 'auto'; } + self.video.preload = 'auto'; self.video.volume = getVolume(); self.video.playbackRate = self.options.playbackRate; self.$video.css(css);