iframe or In-Page embed

When developing enhancements for the Brightcove player you will need to decide if the code is a best fit for the iframe or In-Page embed implementation. The best practice recommendation is to build a plugin for use with an iframe implementation. The advantages of using the iframe player are:

No collisions with existing JavaScript and/or CSS

Automatically responsive

The iframe eases use in social media apps (or whenever the video will need to "travel" into other apps)

Although integrating the In-Page embed player can be more complex, there are times when you will plan your code around that implementation. To generalize, this approach is best when the containing page needs to communicate to the player. Specifically, here are some examples:

Code in the containing page needs to listen for and act on player events

The player uses styles from the containing page

The iframe will cause app logic to fail, like a redirect from the containing page

Even if your final implementation does not use the iframe code, you can still use the In-Page embed code with a plugin for your JavaScript and a separate file for your CSS. This encapsulates your logic so that you can easily use it in multiple players.

API/Plugin resources used

Player/HTML configuration

This section details any special configuration needed during player creation. In addition, other HTML elements that must be added to the page, beyond the in-page embed player implementation code, are described.

Player configuration

The IMA3 plugin was configured in Studio as follows:

The Overlay plugin was configured in Studio as follows:

Other HTML

No other HTML elements are added to the page.

Application flow

The basic logic behind this application is:

The IMA3 and Overlay plugins are configured in Studio.

The Overlay is initially hidden.

On ad start, the overlay is shown and every second a function is called that injects the remaining time into the overlay.

On ad stop, the overlay is hidden, and some cleanup of the overlay is done.

Convert times into seconds with no decimals

Find the code which is labeled:

// ### +++ Helpful method to convert seconds +++ ###

This helper function takes the times, which could contain hours, minutes and seconds, and simple converts to seconds.

Set up listening for ad events

Find the code which is labeled:

// ### Set up listening for ad events ###

After the ad and video information is loaded into the player, you know this waiting for loadedmetadata, you use the on() method to listen for ima3-started and ima3-complete.

Show overlay on ad start

Find the code which is labeled:

// ### On start of ad ###

The overlay is displayed, then JavaScript's setInterval() method is used to call the custom everySecond() method. In the everySecond() method the current time of the ad playing is subtracted from the duration, and the formatted result injected into the overlay.

Hide overlay on ad completed

Find the code which is labeled:

// ### On end of ad ###

A variable, named theInterval, was created by the previously called setInterval(), needs to be cleared by JavaScript's clearInterval() method. This is needed as processing time is taken by the interval variable. Finally, the overlay is hidden and any injected HTML is cleared.

Application styling

The CSS contains two interesting styles. The first is a style that is used to hide and show the overlay, which uses the display style. The second is the set of styles that controls the look of the overlay.

Plugin code

Normally when converting the JavaScript into a Brightcove Player plugin nominal changes are needed. One required change is to replace the standard use of the ready() method with the code that defines a plugin.

Here is the very commonly used start to JavaScript code that will work with the player:

As mentioned earlier, you can see the plugin's JavaScript code in this document's corresponding GitHub repo: adCountdown.js.

Using the plugin with a player

Once you have the plugin's CSS and JavaScript files stored in an Internet accessible location, you can use the plugin with a player. In Studio's PLAYERS module you can choose a player, then in the PLUGINS section add the URLs to the CSS and JavaScript files, and also add the Name and Options, if options are needed.