Ads bug fixes

This commit is contained in:
Sam Potts
2019-02-01 00:24:48 +11:00
parent d0e3c7c6d0
commit eb628c8e4f
27 changed files with 406 additions and 296 deletions

View File

@ -3183,6 +3183,10 @@ var isTrack = function isTrack(input) {
return instanceOf(input, TextTrack) || !isNullOrUndefined(input) && isString(input.kind);
};
var isPromise = function isPromise(input) {
return instanceOf(input, Promise);
};
var isEmpty = function isEmpty(input) {
return isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;
};
@ -3228,6 +3232,7 @@ var is$1 = {
keyboardEvent: isKeyboardEvent,
cue: isCue,
track: isTrack,
promise: isPromise,
url: isUrl,
empty: isEmpty
};
@ -3717,6 +3722,28 @@ var support = {
ui: ui
};
},
// Detect support for autoplay
/* autoplay: (() => {
const video = document.createElement('video');
video.src = 'https://cdn.plyr.io/static/blank.mp4';
const promise = video.play();
if (is.promise(promise)) {
console.warn('PROMISE', promise);
promise
.then(() => {
console.warn('supported');
return true;
})
.catch(() => {
console.warn('not supported');
return false;
});
} else {
console.warn('supported - no promise');
return true;
}
})(), */
// Picture-in-picture support
// Safari & Chrome only currently
pip: function () {
@ -6255,7 +6282,7 @@ var defaults = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
iconUrl: 'https://cdn.plyr.io/3.4.8/plyr.svg',
iconUrl: 'https://cdn.plyr.io/3.5.0-beta.3/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
// Quality default
@ -7585,23 +7612,6 @@ function () {
on.call(player, player.media, 'waiting canplay seeked playing', function (event) {
return ui.checkLoading.call(player, event);
}); // If autoplay, then load advertisement if required
// TODO: Show some sort of loading state while the ad manager loads else there's a delay before ad shows
on.call(player, player.media, 'playing', function () {
if (!player.ads) {
return;
} // If ads are enabled, wait for them first
if (player.ads.enabled && !player.ads.initialized) {
// Wait for manager response
player.ads.managerPromise.then(function () {
return player.ads.play();
}).catch(function () {
return player.play();
});
}
}); // Click video
if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {
@ -9209,10 +9219,11 @@ function () {
google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED); // Set language
google.ima.settings.setLocale(this.player.config.ads.language); // We assume the adContainer is the video container of the plyr element
// that will house the ads
google.ima.settings.setLocale(this.player.config.ads.language); // Set playback for iOS10+
this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container); // Request video ads to be pre-loaded
google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline); // We assume the adContainer is the video container of the plyr element that will house the ads
this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media); // Request video ads to be pre-loaded
this.requestAds();
}
@ -9552,11 +9563,9 @@ function () {
// Hide the advertisement container
this.elements.container.style.zIndex = ''; // Ad is stopped
this.playing = false; // Play our video
this.playing = false; // Play video
if (this.player.currentTime < this.player.duration) {
this.player.play();
}
this.player.media.play();
}
/**
* Pause our video
@ -9566,11 +9575,11 @@ function () {
key: "pauseContent",
value: function pauseContent() {
// Show the advertisement container
this.elements.container.style.zIndex = 3; // Ad is playing.
this.elements.container.style.zIndex = 3; // Ad is playing
this.playing = true; // Pause our video.
this.player.pause();
this.player.media.pause();
}
/**
* Destroy the adsManager so we can grab new ads after this. If we don't then we're not
@ -9973,8 +9982,8 @@ function () {
}
}
}, {
key: "finishScrubbing",
value: function finishScrubbing() {
key: "endScrubbing",
value: function endScrubbing() {
var _this4 = this;
this.mouseDown = false; // Hide scrubbing preview. But wait until the video has successfully seeked before hiding the scrubbing preview
@ -10816,8 +10825,19 @@ function () {
* Play the media, or play the advertisement (if they are not blocked)
*/
value: function play() {
var _this2 = this;
if (!is$1.function(this.media.play)) {
return null;
} // Intecept play with ads
if (this.ads && this.ads.enabled) {
this.ads.managerPromise.then(function () {
return _this2.ads.play();
}).catch(function () {
return _this2.media.play();
});
} // Return the promise (for HTML5)
@ -11035,7 +11055,7 @@ function () {
}, {
key: "destroy",
value: function destroy(callback) {
var _this2 = this;
var _this3 = this;
var soft = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
@ -11047,20 +11067,20 @@ function () {
// Reset overflow (incase destroyed while in fullscreen)
document.body.style.overflow = ''; // GC for embed
_this2.embed = null; // If it's a soft destroy, make minimal changes
_this3.embed = null; // If it's a soft destroy, make minimal changes
if (soft) {
if (Object.keys(_this2.elements).length) {
if (Object.keys(_this3.elements).length) {
// Remove elements
removeElement(_this2.elements.buttons.play);
removeElement(_this2.elements.captions);
removeElement(_this2.elements.controls);
removeElement(_this2.elements.wrapper); // Clear for GC
removeElement(_this3.elements.buttons.play);
removeElement(_this3.elements.captions);
removeElement(_this3.elements.controls);
removeElement(_this3.elements.wrapper); // Clear for GC
_this2.elements.buttons.play = null;
_this2.elements.captions = null;
_this2.elements.controls = null;
_this2.elements.wrapper = null;
_this3.elements.buttons.play = null;
_this3.elements.captions = null;
_this3.elements.controls = null;
_this3.elements.wrapper = null;
} // Callback
@ -11069,22 +11089,22 @@ function () {
}
} else {
// Unbind listeners
unbindListeners.call(_this2); // Replace the container with the original element provided
unbindListeners.call(_this3); // Replace the container with the original element provided
replaceElement(_this2.elements.original, _this2.elements.container); // Event
replaceElement(_this3.elements.original, _this3.elements.container); // Event
triggerEvent.call(_this2, _this2.elements.original, 'destroyed', true); // Callback
triggerEvent.call(_this3, _this3.elements.original, 'destroyed', true); // Callback
if (is$1.function(callback)) {
callback.call(_this2.elements.original);
callback.call(_this3.elements.original);
} // Reset state
_this2.ready = false; // Clear for garbage collection
_this3.ready = false; // Clear for garbage collection
setTimeout(function () {
_this2.elements = null;
_this2.media = null;
_this3.elements = null;
_this3.media = null;
}, 200);
}
}; // Stop playback