Remix VOD for Ads

Overview

Remix VOD for Ads enables server side mixing of content to produce a single output stream. Clients and playback devices see the stream coming from a single origin and having a timeline without any discontinuities.

In addition to the standard functionality provided by Remix VOD it adds:

  • signalling for advertisement tracking, for example, based on a VAST 4.0 XML which includes events with callback URLs
  • passing or inserting SCTE 35 messages to trigger events downstream
  • just-in-time transcoding for mismatched content

The solution makes use of two Unified Streaming Platform products:

  • Remix, to create a single presentation from multiple input sources
  • Origin, for Just-In-Time packaging/transmuxing to all supported streaming formats
  • Transcode, for Just-In-Time transcoding of audio and video to match a desired output profile

Remix VOD for Ads allows for the following use case:

Components

Unified Origin

Playout Origin for content, this takes the playlist MP4 created by Remix and plays out all streaming formats, optionally with DRM applied.

Transcode Origin

Note

TODO: expand.

Remix Origin

Based on a SMIL playlist compares the listed sources and produces a single output MP4.

Remix Caching Proxy

The Remix process is relatively intensive, but only really needs to be done once for any given presentation. The caching proxy sits between the Unified Origin and Remix Origin to prevent unnecessary repetition of the Remix process.

This can be any HTTP caching proxy, for example, Apache httpd with mod_cache and mod_proxy, NGINX, Varnish.

SMIL Origin

Creates a playlist based on a request URL.

This is the most important integration point as it provides the mapping of a request URL to the source media that will be used to produce the final presentation.

Content Storage

Content can be accessed from either locally addressed or HTTP storage.

Integration

SMIL Origin

The SMIL Origin must return a SMIL 2.0 (Synchronized Multimedia Integration Language) playlist.

SMIL functionality supported by Remix

  • outputDescription meta element in head to point to target profile
    • without setting this, the first clip in the playlist will be used for the target profile
  • seq, sequence of clips to playout
  • par, combine multiple files into a single clip as part of the sequence, e.g. if different bitrates are stored in separate source files
  • clipBegin, clipEnd, to select only parts of the clip rather than whole
    • currently only supports using the "wallclock(ISO 8601)" format, not all formats included in SMIL 2.0

SMIL Examples

An SMIL playlist for a simple use case which will play a pre-roll bumper and 30 seconds of Tears of Steel is:

<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head/>
  <body>
    <seq>
      <video src="http://sample-content/logo_5s_dref.mp4"/>
      <video src="http://sample-content/tears-of-steel-dref.mp4" clipEnd="wallclock(1970-01-01T00:00:30.000Z)"/>
    </seq>
  </body>
</smil>

Pre-roll and mid-roll advertisements with Sintel main content. Targetting Sintel for the output profile.

<?xml version='1.0' encoding='UTF-8'?>
<smil
  xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
    <meta name="outputDescription" content="http://storage/main/sintel/sintel_dref.mp4"/>
  </head>
  <body>
    <seq>
      <video src="http://storage/ads/origin/origin08_x264.mp4"/>
      <video src="http://storage/main/sintel/sintel_dref.mp4" clipEnd="wallclock(1970-01-01T00:00:30.000Z)"/>
      <video src="http://storage/ads/capture/capture10_x264.mp4"/>
      <video src="http://storage/main/sintel/sintel_dref.mp4" clipBegin="wallclock(1970-01-01T00:00:30.000Z)" clipEnd="wallclock(1970-01-01T00:01:00.000Z)"/>
    </seq>
  </body>
</smil>

Based on different bitrates in separate MP4s as part of a VAST response from an ad network (Freewheel in this case), use <par> to combine into a single item.

<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head>
  </head>
  <body>
    <seq>
      <par>
        <video src="http://freewheel-mtgx-tv.akamaized.net/path/to/files/file_1280.mp4" />
        <video src="http://freewheel-mtgx-tv.akamaized.net/path/to/files/file_1024.mp4" />
        <video src="http://freewheel-mtgx-tv.akamaized.net/path/to/files/file_768.mp4" />
        <video src="http://freewheel-mtgx-tv.akamaized.net/path/to/files/file_480.mp4" />
      </par>
      <video src="http://local-storage.unified-streaming.com/demo/tears-of-steel/tears-of-steel-teaser-no-jpg.ism" />
    </seq>
  </body>
</smil>

Storage

Storage for Remix VOD for Ads can consist of any form of attached storage (a mount point on the filesystem) or HTTP accessible storage such as S3.

The only requirement is that content must be accessible at the same path from both Remix Origin and Unified Origin. e.g. if using network attached storage mounted to /storage, the mount must be the same on all Remix Origins and Unified Origins.

Deployment

Remix VOD for Ads is flexible when it comes to deployment options, as both Unified Origin and Remix are stateless and work over HTTP. This means it can easily be deployed on both physical or virtual hosts, or using container technology such as Docker.

Our GitHub Remix Demo has each component running in a separate Docker container, and uses Docker Compose to deploy and configure them to produce a working environment.

Supported OS and software versions

Remix requires Apache 2.4.x

Recommended OS and web server versions are:

Ubuntu 14.04 Apache/2.4.7
Ubuntu 16.04 Apache/2.4.18
Alpine Linux v3.4 Apache/2.4.27

Environments

Remix VOD for Ads can be deployed using various approaches:

  • Bare metal
  • Virtual machines as for instance Amazon EC2
  • Container environments managaed by for instane Kubernetes

Note

TODO: expand the above.

Sizing

Note

TODO: expand based on sizing experiments.

Requirements

  • Content must be accesible to both Remix and Unified Origins on the same URL