Creating a SMIL Playlist

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
    • can also be applied to 'par' elements, as an extension
  • 'clipMode', Specifying conditioning info using 'clipMode'
    • This attribute specifies how 'clipBegin' and 'clipEnd' values are interpreted relative to the media being used

Note

When using clipMode against archive fragments captured with --remix careful consideration should be made to the location of sync-samples in the media referenced. Should unified remix be unable to negatively seek to a sync-sample in the archive the process will still complete.

This may result in an error response for the first archive fragment requested via Unified Origin (as the source will not begin with a sync sample).

A viable workaround is to use unified_remix with transcode to generate a new source clip with a sync-sample in the required location and then process this clip through an addition remix step to ensure your new asset begins with the newly created sync-sample.

SMIL Examples

A SMIL playlist for a simple use case that will play a pre-roll bumper and 30 seconds of Tears of Steel looks like this:

<?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>

An example for a use case with pre- and mid-roll advertisements using Sintel as the 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>

An example based on different bitrates in separate MP4s, using <par> to combine these MP4s 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://storage/path/to/files/file_1280.mp4" />
        <video src="http://storage/path/to/files/file_1024.mp4" />
        <video src="http://storage/path/to/files/file_768.mp4" />
        <video src="http://storage/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>