Removed a double this.enabled variable and updated a comment in ads.js. Also made sure the adsmanager promise also can fail, so we can use it to wait for getting the advertisement ready when someone clicks the play button. Otherwise there it can look glitchy when the actual video starts playing and the video ad plays a few seconds later because the vast tag was slow to retrieve. Also fixed a typo.

This commit is contained in:
Arthur Hulsman 2018-03-06 17:27:59 +01:00
parent 6f061621ad
commit e90a603d57
3 changed files with 13 additions and 15 deletions

View File

@ -259,7 +259,7 @@ const defaults = {
// Ads
'adsloaded',
'adscontentpause',
'adsconentresume',
'adscontentresume',
'adstarted',
'adsmidpoint',
'adscomplete',

View File

@ -36,9 +36,8 @@ class Ads {
this.playing = false;
this.initialized = false;
this.blocked = false;
this.enabled = utils.is.url(player.config.ads.tag);
// Check if a tag URL is provided.
// Check if ads are enabled.
if (!this.enabled) {
return;
}
@ -83,14 +82,12 @@ class Ads {
// thing doesn't resolve within our set time; we bail
this.startSafetyTimer(12000, 'ready()');
// Setup a simple promise to resolve if the IMA loader is ready
this.loaderPromise = new Promise(resolve => {
this.on('ADS_LOADER_LOADED', () => resolve());
});
// Setup a promise to resolve if the IMA manager is ready
this.managerPromise = new Promise(resolve => {
this.managerPromise = new Promise((resolve, reject) => {
// The ad is pre-loaded and ready
this.on('ADS_MANAGER_LOADED', () => resolve());
// Ads failed
this.on('ERROR', () => reject());
});
// Clear the safety timer

View File

@ -309,14 +309,15 @@ class Plyr {
* Play the media, or play the advertisement (if they are not blocked)
*/
play() {
// TODO: Always return a promise?
if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {
this.ads.managerPromise.then(() => {
this.ads.play();
return null;
}).catch(() => {
this.media.play();
});
} else {
this.media.play();
}
// Return the promise (for HTML5)
return this.media.play();
}
/**