vast-player

Playback VAST creatives in a web browser.

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
vast-player
0.2.106 years ago8 years agoMinified + gzip package size for vast-player in KB

Readme

vast-player
Vast-Player makes it easy to playback linear VAST creatives in the browser. It currently supports VPAID 1.0/2.0 (JavaScript and Flash) and HTML5 <MediaFile>s. The library has the following responsibilites:
  • Requesting VAST ad tags
  • Resolving VAST wrapper tags
  • Choosing a <MediaFile> based on the browser environment
  • Loading/initializing a <MediaFile> (including VPAID creatives)
  • Firing VAST tracking pixels/impressions at the correct time
  • Opening VAST <VideoClicks> when appropriate

Example

<!DOCTYPE html>
<html>
    <head>
        <title>Vast-Player Example</title>
        <script src="https://cdn.jsdelivr.net/npm/vast-player@latest/dist/vast-player.min.js"></script>
        <style>
            #container {
                width: 640px; height: 385px;
                position: relative;
            }
        </style>
    </head>
    <body>
        <div id="container"></div>
        <script>
            (function(VASTPlayer) {
                'use strict';

                var player = new VASTPlayer(document.getElementById('container'));

                player.once('AdStopped', function() {
                    console.log('Ad finished playback!');
                });

                player.load(
                    'https://platform-staging.reelcontent.com/api/public/vast/2.0/tag?campaign=cam-e951792a909f17'
                ).then(function startAd() {
                    return player.startAd();
                }).catch(function(reason) {
                    setTimeout(function() { throw reason; }, 0);
                });
            }(window.VASTPlayer));
        </script>
    </body>
</html>

Adding to Project

via npm (with browserify)

  1. Install as a dependency
```bash
$> npm install vast-player --save
```
  1. Use the module
```javascript
var VASTPlayer = require('vast-player');
var player = new VASTPlayer(document.getElementById('container'));

player.load('https://www.myadserver.com/mytag');
```

via RequireJS

  1. Add to RequireJS config
```javascript
requirejs.config({
    paths: {
        VASTPlayer: 'https://cdn.jsdelivr.net/npm/vast-player@0.2/dist/vast-player.min.js'
    }
});
```
  1. Use the module
```javascript
define(['VASTPlayer'], function(VASTPlayer) {
    var player = new VASTPlayer(document.getElementById('container'));

    player.load('https://www.myadserver.com/mytag');
});
```

via a <script>

  1. Add a <script> to the page
```html
<script src="https://cdn.jsdelivr.net/npm/vast-player@0.2/dist/vast-player.min.js"></script>
```
  1. Use the module
```javascript
var player = new window.VASTPlayer(document.getElementById('container'));

player.load('https://www.myadserver.com/mytag');
```

API

main exports

VASTPlayer(container:Node, config:Object) extends EventEmitter

  • Parameters
* **container**:`Node`: A DOM node into which the ad will be inserted. The ad will take up 100% of the width and height of the *container*.
* *optional* **config**:`Object`: The following properties are supported
    * **config.vast**:`Object`: Configuration for fetching VAST ad tags
        * **config.vast.resolveWrappers**:`Boolean`: `true` if VAST `<Wrapper>`s should be fetched automatically. Defaults to `true`.
        * **config.vast.maxRedirects**:`Number`: The number of VAST `<Wrapper>`s that are allowed to be fetched. Defaults to `5`.
    * **config.tracking**:`Object`: Configuration for firing tracking pixels
        * **config.tracking.mapper**:`Function`: This `Function` can be used to transform the URIs of VAST tracking pixels. The `Function` will be invoked every time a tracking pixel is fired, with the URI of the pixel as the only argument. The returned `String` URI will be fired. Deaults to an [identity `Function`](https://en.wikipedia.org/wiki/Identity_function).
  • Methods
* **load(*uri*:`String`)** => `Promise`: Fetches a VAST ad tag and loads one of its `<MediaFile>`s into the *container*. The returned `Promise` will be resolved when it is safe to start playback via `startAd()`.
* **startAd()** => `Promise`: Starts playback of the ad. This method may only be called once. The returned `Promise` will be fulfilled when the ad starts playing. This method cannot be called until the `Promise` returned by `load()` is fulfilled.
* **stopAd()** => `Promise`: Stops playback of the ad and cleans-up its resources. Once this method has been called, the ad cannot be started again via `startAd()`. The returned `Promise` will be fulfilled when the ad's resources are cleaned-up. This method cannot be called until the `Promise` returned by `load()` is fulfilled.
* **pauseAd()** => `Promise`: Pauses ad playback. The returned `Promise` will be fulfilled when the ad pauses. This method cannot be called until the `Promise` returned by `startAd()` is fulfilled.
* **resumeAd()** => `Promise`: Resumes ad playback. The returned `Promise` will be fulfilled when ad playback resumes. This method cannot be called until the `Promise` returned by `pauseAd()` is fulfilled.
  • Properties
* **container**:`Node`: The supplied container.
* **config**:`Object`: The supplied configuration, with defaults applied.
* **vast**:[`VAST`](https://www.npmjs.com/package/vastacular#vastjson): A [vastacular](https://www.npmjs.com/package/vastacular) `VAST` instance representing the fetched ad tag.
* **ready**:`Boolean`: Indicates if the ad is ready for playback.
* **adRemainingTime**:`Number`: The amount of time (in seconds) left in the linear ad. Accessing this property before the ad is loaded will throw an `Error`.
* **adDuration**:`Number`: The total duration of the ad (in seconds.) Accessing this property before the ad is loaded will throw an `Error`.
* **adVolume**:`Number`: Gets/sets the volume of the ad with `0` being completely silent and `1` being as loud as possible. Accessing (or setting) this property before the ad is loaded will throw an `Error`.
  • Events: All VPAID 2.0 events are supported. A subset of these events are supported for non-VPAID <MediaFile>s as well. In addition, the following events are emitted:
* **ready**: Fired when `startAd()` may be called and the `ready` property becomes `true`.
* **error**: Fired when an error occurs with ad loading/playback.

VASTPlayer.vpaidSWFLocation:String

The location of the SWF needed for Flash VPAID playback. The defaults to a location on the jsDelivr CDN. Only override this property if you want to use a version of the SWF you have uploaded yourself.