Documentation

Ad Scheduler

Features summary

  • Insert pre-roll, mid-roll and/or post-roll advertisement at designated timestamps
  • Compatible with on-demand, live and DVR content for desktop, mobile and OTT devices
  • Works with Google IMA and rmp-vast
  • Compatible with client side waterfalling to maximize fill-rate
  • Does not require VMAP support

Player settings

adSchedule: Oject


adSchedule.preroll: String


adSchedule.midroll: [Number, String][]


adSchedule.postroll: String


Pass an ad-schedule to the player. See below for examples. Mid-roll timestamps must be passed in seconds but the player will do its best to honor sub-second precision (1.2s === 1200ms). Default: {}.

adScheduleReloadOnEnded : Boolean

When content ends and ad-schedule has finished delivering all advertisement, if viewer requests to view content again re-deploy ad-schedule. Default: true.

1 pre-roll, 2 mid-roll at 30s and 60s, 1 post-roll video ads - see this example here

<script src="https://cdn.radiantmediatechs.com/rmp/10.2.0/js/rmp.min.js"></script>
<div id="rmp"></div>
<script>
  // Streaming source - MP4 progressive download in this example
  const src = {
    hls: 'https://your-hls-url.m3u8'
  };
  // Define ad-schedule
  const adSchedule = {
    // Preroll
    preroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml',
    // Midroll
    midroll: [
      [30.5, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-skippable.xml'],
      [60, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-skippable.xml']
    ],
    // Postroll
    postroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'
  };
  const settings = {
    licenseKey: 'your-license-key',
    width: 640,
    height: 360,
    src,
    contentMetadata: {
      poster: [
        'https://your-poster-url.jpg'
      ]
    },
    ads: true,
    // Pass ad schedule
    adSchedule
  };
  const rmp = new RadiantMP('rmp');
  // Initialization ... and done!
  async function initRmpPlayer() {
    try {
      await rmp.init(settings);
    } catch(error) {
      console.error('Radiant Media Player failed to initialize', error);
    }
  }
  initRmpPlayer();
</script>

Using percent to add mid-roll ads

<script src="https://cdn.radiantmediatechs.com/rmp/10.2.0/js/rmp.min.js"></script>
<div id="rmp"></div>
<script>
  // Streaming source - HLS in this example
  const src = {
    hls: 'https://your-hls-url.m3u8'
  };
  // Define ad-schedule
  const adSchedule = {
    // Preroll
    preroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml',
    // Midroll
    midroll: [
      ['5%', 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-skippable.xml'],
      ['50%', 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-skippable.xml']
    ],
    // Postroll
    postroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'
  };
  const settings = {
    licenseKey: 'your-license-key',
    width: 640,
    height: 360,
    src,
    contentMetadata: {
      poster: [
        'https://your-poster-url.jpg'
      ]
    },
    ads: true,
    // Pass ad schedule
    adSchedule
  };
  const rmp = new RadiantMP('rmp');
  // Initialization ... and done!
  async function initRmpPlayer() {
    try {
      await rmp.init(settings);
    } catch(error) {
      console.error('Radiant Media Player failed to initialize', error);
    }
  }
  initRmpPlayer();
</script>

You can combine both percent-based values and second-based values for midroll attribute

Cycling video ads in a live stream

For live video streaming you can display mid-roll video ads at fixed or flexible intervals. In the following example a pre-roll is played when the live player is started and mid-roll video ads are played every 2 minutes (when the player is not paused) for the first 10 minutes of the live stream:

<script src="https://cdn.radiantmediatechs.com/rmp/10.2.0/js/rmp.min.js"></script>
<div id="rmp"></div>
<script>
  // Streaming source - HLS in this example
  const src = {
    hls: 'https://your-live-hls-url.m3u8'
  };
  // Define ad schedule
  const adSchedule = {
    // Preroll
    preroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml',
    // Midroll: a mid-roll ad is played every 120 seconds (2 minutes) for the first 10 minutes of live video
    midroll: [
      [120, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'],
      [240, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'],
      [360, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'],
      [480, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'],
      [600, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml']
    ]
  };
  const settings = {
    licenseKey: 'your-license-key',
    width: 640,
    height: 360,
    src,
    contentMetadata: {
      poster: [
        'https://your-poster-url.jpg'
      ]
    },
    ads: true,
    // Pass ad schedule
    adSchedule
  };
  const rmp = new RadiantMP('rmp');
  // Initialization ... and done!
  async function initRmpPlayer() {
    try {
      await rmp.init(settings);
    } catch(error) {
      console.error('Radiant Media Player failed to initialize', error);
    }
  }
  initRmpPlayer();
</script>

Mid-roll video ads using the midrollRepeat attribute (live or on-demand video)

The midrollRepeat attribute lets you repeat a request to a specific adTag at regular intervals.

<script src="https://cdn.radiantmediatechs.com/rmp/10.2.0/js/rmp.min.js"></script>
<div id="rmp"></div>
<script>
  // Streaming source - HLS for example
  const src = {
    hls: 'https://your-hls-url.m3u8'
  };
  // Define ad schedule
  const adSchedule = {
    // Preroll
    preroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml',
    // Midroll: every 60 seconds the player will attempt to load a video ad at the given URL.
    midrollRepeat: [60, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml']
  };
  const settings = {
    licenseKey: 'your-license-key',
    width: 640,
    height: 360,
    src,
    contentMetadata: {
      poster: [
        'https://your-poster-url.jpg'
      ]
    },
    ads: true,
    // Pass ad schedule
    adSchedule
  };
  const rmp = new RadiantMP('rmp');
  // Initialization ... and done!
  async function initRmpPlayer() {
    try {
      await rmp.init(settings);
    } catch(error) {
      console.error('Radiant Media Player failed to initialize', error);
    }
  }
  initRmpPlayer();
</script>

Waterfalling with ad scheduling

The adScheduleWaterfall setting will let you add client-side waterfalling to your ad-schedule.

<script src="https://cdn.radiantmediatechs.com/rmp/10.2.0/js/rmp.min.js"></script>
<div id="rmp"></div>
<script>
  // Streaming source - MP4 progressive download in this example
  const src = {
    hls: 'https://your-hls-url.m3u8'
  };
  const adScheduleWaterfall = [
    'https://your-fallback-ad-tag-url-1',
    'https://your-fallback-ad-tag-url-2',
    'https://your-fallback-ad-tag-url-3'
  ];
  // Define ad schedule
  const adSchedule = {
    // Preroll
    preroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml',
    // Midroll at 30 seconds
    midroll: [
      [30, 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-skippable.xml']
    ],
    // Postroll
    postroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'
  };
  const settings = {
    licenseKey: 'your-license-key',
    width: 640,
    height: 360,
    src,
    contentMetadata: {
      poster: [
        'https://your-poster-url.jpg'
      ]
    },
    ads: true,
    // Pass ad schedule
    adSchedule,
    // Pass waterfall Array for ad schedule
    adScheduleWaterfall
  };
  const rmp = new RadiantMP('rmp');
  // Initialization ... and done!
  async function initRmpPlayer() {
    try {
      await rmp.init(settings);
    } catch(error) {
      console.error('Radiant Media Player failed to initialize', error);
    }
  }
  initRmpPlayer();
</script>

Custom schedule callback

The adScheduleCallback setting will let you add a custom callback before video ads are requested in an ad-schedule.

<script src="https://cdn.radiantmediatechs.com/rmp/10.2.0/js/rmp.min.js"></script>
<div id="rmp"></div>
<script>
  const src = {
    hls: 'https://your-hls-url.m3u8'
  };
  const elementID = 'rmp';
  const rmp = new RadiantMP(elementID);
  const adTagUrl = 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-1.xml';
  // Custom callback that will be run before an ad in the schedule is called
  // It must return a Promise that resolves to a valid VAST tag URL
  const adScheduleCallback = function () {
    return new Promise(resolve => {
      rmp.pause();
      setTimeout(() => {
        console.log(adTagUrl);
        resolve(adTagUrl);
      }, 2500);
    });
  };
  const settings = {
    licenseKey: 'your-license-key',
    src,
    width: 640,
    height: 360,
    ads: true,
    autoplay: true,
    muted: true,
    // we pass our adScheduleCallback
    adScheduleCallback: adScheduleCallback,
    adSchedule: {
      // preroll, since a callback will be run we just input 'callback'
      preroll: 'callback',
      // midroll, since a callback will be run we just input 'callback'
      midroll: [
        [30, 'callback']
      ],
      // postroll, since a callback will be run we just input 'callback'
      postroll: 'callback'
    },
    contentMetadata: {
      poster: [
        'https://www.radiantmediaplayer.com/images/poster-rmp-showcase.jpg'
      ]
    }
  };
  // Initialization ... and done!
  async function initRmpPlayer() {
    try {
      await rmp.init(settings);
    } catch(error) {
      console.error('Radiant Media Player failed to initialize', error);
    }
  }
  initRmpPlayer();
</script>

We have also published an example for using adScheduleCallback setting to enable header bidding through Prebid.js in an ad-schedule in our GitHub repository.

Ad-schedule API

adScheduleConfiguration getter|setter (AdSchedule)

// getter
const adScheduleConfiguration = rmp.adScheduleConfiguration;
// setter
rmp.adScheduleConfiguration = {
  preroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml',
  midroll: [
    ['15%', 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-skippable.xml'],
    ['50%', 'https://www.radiantmediaplayer.com/vast/tags/inline-linear-skippable.xml']
  ],
  postroll: 'https://www.radiantmediaplayer.com/vast/tags/inline-linear.xml'
};

get|set the current ad-schedule for the player - you may want to call adScheduleConfiguration setter when setSrc API method resolves to apply a different ad-schedule when loading a new content source.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License.

©2015-2025 Radiant Media Player. All Rights Reserved.