diff --git a/src/js/events.js b/src/js/events.js index 91635f3a38..80400183d4 100644 --- a/src/js/events.js +++ b/src/js/events.js @@ -69,7 +69,7 @@ vjs.on = function(elem, type, fn){ * Removes event listeners from an element * @param {Element|Object} elem Object to remove listeners from * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element. - * @param {Function} fn Specific listener to remove. Don't incldue to remove listeners for an event type. + * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type. * @private */ vjs.off = function(elem, type, fn) { diff --git a/src/js/media/html5.js b/src/js/media/html5.js index 9cb1e3c14a..8b74da86ca 100644 --- a/src/js/media/html5.js +++ b/src/js/media/html5.js @@ -32,8 +32,11 @@ vjs.Html5 = vjs.MediaTechController.extend({ var source = options['source']; - // set the source if one was provided - if (source && this.el_.currentSrc !== source.src) { + // Set the source if one is provided + // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted) + // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source + // anyway so the error gets fired. + if (source && (this.el_.currentSrc !== source.src) || (player.tag && player.tag.initNetworkState_ === 3)) { this.el_.src = source.src; } diff --git a/src/js/player.js b/src/js/player.js index 91d84a9c1c..9c49b0ae3f 100644 --- a/src/js/player.js +++ b/src/js/player.js @@ -279,6 +279,10 @@ vjs.Player.prototype.createEl = function(){ this.width(this.options_['width'], true); // (true) Skip resize listener on load this.height(this.options_['height'], true); + // vjs.insertFirst seems to cause the networkState to flicker from 3 to 2, so + // keep track of the original for later so we can know if the source originally failed + tag.initNetworkState_ = tag.networkState; + // Wrap video tag in div (el/box) container if (tag.parentNode) { tag.parentNode.insertBefore(el, tag);