Skip to content

Instantly share code, notes, and snippets.

@yllus
Created February 1, 2016 20:57
Show Gist options
  • Select an option

  • Save yllus/709755f0f857f28001b1 to your computer and use it in GitHub Desktop.

Select an option

Save yllus/709755f0f857f28001b1 to your computer and use it in GitHub Desktop.
JavaScript code we load on all pages that use the new VideoJS-based Brightcove video player
var CFLVideo = window.CFLVideo || {};
CFLVideo.Brightcove = (function() {
var _this, _element, _players = [];
function displayAds( video_player_id ) {
var player = videojs( video_player_id );
// If ads are disabled for this video, exit immediately.
if ( typeof player.options().disableads !== 'undefined' ) {
if ( player.options().disableads == 'true' ) {
return;
}
}
player.on('loadedmetadata', function() {
var str_site = '';
var str_title = '';
var arr_targeting = window.CFLAdUtility.targeting;
for ( var i = 0; i < arr_targeting.length; i++ ) {
var key = Object.keys(arr_targeting[i]);
var val = arr_targeting[i][key];
if ( key[0] == 'site' ) {
str_site = val;
window.CFLAdUtility.log('CFLVideo.Brightcove.displayAds(): Target ' + key[0] + ' set to ' + val);
}
/*
if ( key[0] == 'title' ) {
str_title = val;
window.CFLAdUtility.log('CFLVideo.Brightcove.displayAds(): Target ' + key[0] + ' set to ' + val);
}
*/
}
// Temporarily disable IMA3 from being used on iOS 7 and up.
var bool_use_ima3 = true;
var str_ver = getIOSVersion();
if ( str_ver !== false ) {
if ( str_ver >= 7 ) {
bool_use_ima3 = false;
}
}
if ( bool_use_ima3 === true ) {
player.ima3({
debug: false,
prerollTimeout: 5000,
adTechOrder: ["html5"],
serverUrl: 'https://pubads.g.doubleclick.net/gampad/ads?sz=1280x720&iu=/103711331/Ticats_Video&impl=s&gdfp_req=1&env=vp&output=xml_vast2&unviewed_position_start=1&url=[referrer_url]&description_url=[description_url]&correlator=[timestamp]'
});
}
});
player.on('ima3-started', function() {
var arr_controlbars = document.getElementById(player.id_).getElementsByClassName("vjs-control-bar");
for ( var i = 0; i < arr_controlbars.length; i++ ) {
if ( arr_controlbars[i].className.indexOf('vjs-ad-control-bar') == -1 ) {
arr_controlbars[i].style.display = 'none';
}
}
});
// Fix a bug where the IMA3 ad control bar never goes away after the ad ends.
player.on('ima3-complete', function() {
Element.prototype.remove = function() {
this.parentElement.removeChild(this);
}
NodeList.prototype.remove = HTMLCollection.prototype.remove = function() {
for(var i = this.length - 1; i >= 0; i--) {
if(this[i] && this[i].parentElement) {
this[i].parentElement.removeChild(this[i]);
}
}
}
document.getElementById(player.id_).getElementsByClassName("vjs-ad-control-bar").remove();
var arr_controlbars = document.getElementById(player.id_).getElementsByClassName("vjs-control-bar");
for ( var i = 0; i < arr_controlbars.length; i++ ) {
arr_controlbars[i].style.display = 'flex';
}
});
};
function getIOSVersion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later: <http://bit.ly/TJjs1V>
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
var arr_version = [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
return arr_version[0];
}
return false;
}
return {
register: function ( element ) {
_this = this;
_element = element;
displayAds(element[0]);
}
};
})();
@yllus

yllus commented Feb 1, 2016

Copy link
Copy Markdown
Author

Along with that file, we execute CFLVideo.Brightcove.register() on each Brightcove video player displayed with this little bit of code:

<video 
    id="a-unique-video-player-id-on-this-page"
    data-video-id="the-video-id-for-the-video-to-display"
    data-account="you-publishedr-id"
    data-player="default"
    data-embed="default" 
    class="video-js" controls></video>
<script type="text/javascript">CFLVideo.Brightcove.register(jQuery('#a-unique-video-player-id-on-this-page'));</script>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment