Create a looping / rotating playlist for VOD2Live

A general Remix VOD2Live setup looks like below, with the SMIL Origin being a point of integration that's responsible for generating the playlists that schedule the livestream and serve as input for Remix:

../../../_images/vod2live.svg

Assuming you have a server with Origin Live set up and already running, the entire VOD2Live workflow consists of three relatively straightforward steps:

  • Create a SMIL playlist with VOD content that you want to livestream (the recommended maximum length is 24 hours)
  • Process the playlist using Remix, which will read all the source content and output a remixed MP4 that references the source content on a new, continuous timeline
  • Create a Live server manifest (.isml) with the remixed MP4 as input and the --vod2live option enabled to start delivery of the scheduled livestream through Origin

There is nothing specific about a SMIL playlist intended for VOD2Live purposes compared to playlists for other Remix use cases. The only difference being quantitative and not qualitative in kind: in many cases a playlist for VOD2Live is significantly longer (although a relatively short playlist for something like a prerecorded one-off livestreaming event makes sense, too).

The maximum recommended length of a playlist for VOD2Live purposes is 24 hours. For more detailed information on creating SMIL playlists for Remix, including how to add SCTE 35 markers, please refer to SMIL Playlists - Timed Metadata - SCTE 35.

Length of playlist

The recommended maximum length of the playlist is 24 hours. Longer playlists can be created but 24 hours provides a good balance between maintenance, user experience and performance expectations.

Improve playlist processing efficiency by using dref MP4's

The speed at which a playlist is processed by Remix can be increased significantly by using dref MP4's. In short, this means the workflow of creating a playlist will be as follows:

  • Prepare source content (align bit rate ladders across different assets and make sure their encoding profiles match as much as possible)
  • Create dref MP4's that reference source content, using --use_dref_no_subs
  • Create SMIL playlist that points to dref MP4's (instead of source content directly) that reference the source

Live edge within playlist

Remix VOD2Live is set up in such a way that it will loop the playlist. Which point in the playlist is considered the live edge at a given point in time depends on the start time and length of the playlist. The live edge is the point in the playlist within the current loop (with the first loop starting at the s specified start time of the livestream).

Or, take the example of a playlist of 10 hours with a start time of 9 'o clock in the morning: at noon the live edge will be 3 hours into the playlist, whereas at 9 'o clock in the evening, the live edge of the stream will be 2 hours into the playlist, because the playlist has gone through one full loop already.

Reloading playlist

Remix VOD2Live does not support updating the scheduled livestream while it is being delivered. A restart of the stream (with an updated or completely new playlist) is required. There are two methods to initiate such a channel update that we recommend.

Choice switch of channel

As a VOD2Live scheduled livestream does not generate load when there are no viewers, one approach to updating a channel is to create a new one next to the one that already exists and simply let viewers jump over to the new channel by choice.

Forced switch of channel

The second approach to updating a channel is to force viewers to move to the new channel. The options for forcing viewers depend on your level of control over your infrastructure and player. Our suggestion is to simply (re)move the Live server manifest (.isml) that serves as the endpoint for Origin to stream from. This will cause Origin to serve a 410 (Gone) on any subsequent requests for the stream. As part of this approach the player should be configured in such a way that it will respond to the 410 by asking the CMS for an updated URL to the channel.

More complex implementations of the 'forced switch' scenario may be implemented given enough control environment, e.g., SCTE 35 markers may be used to signal a player to move/jump to an updated channel, or the revision parameter on the location header may be changed for a similar instruction.

Process a VOD2Live playlist with Remix

Like creating the playlist, processing it with Remix isn't any different for VOD2Live purposes either:

#!/bin/bash

unified_remix -o remixed.mp4 vod2live.smil

Note

Frame accurate clipping of source material is supported as well, as explained in Media Conditioning For Ad Insertion (but note that Intel Media SDK is a requirement).

Set up a VOD2Live channel with Origin

--vod2live

To set up a VOD2Live channel from a remixed MP4 instead of VOD server manifest (.ism) you need to create a Live server manifest (.isml), and make sure to specify --dvr_window_length and add the --vod2live option (all other Live ingest options, such as those related to archiving, are irrelevant):

 #!/bin/bash

 mp4split -o vod2live.isml \
   --vod2live \
   --dvr_window_length=600 \
   --hls.client_manifest_version=4 \
   --hls.no_multiplex \
   remixed.mp4

That's it, you have now set up a VOD2Live channel. If your Live server manifest is available as an endpoint through Origin, and Origin has access to both the remixed MP4 and the source media that it references, a livestream is generated by Origin in the desired output format, when requested by client (see Player URLs for more info).

Note

When using a remixed MP4 as source, Unified Origin automatically signals DASH AVC content with a codec ID of avc3 (i.e., using in-band parameter sets).

If this does not meet your requirements the --no_inband_parameter_sets option can be used to switch the codec ID to avc1 (i.e., using out-of-band parameter sets).

This is often a requirement for SSAI workflows or legacy playback devices where the handing of or creation of media with in-band codec parameters is not fully supported.

Scheduling a start time

One of the fundamental concepts of a live linear channel is the capabilty to schedule content for playout at a specific point in time. A use case could be owning the exclusive rights to premier a new movie and wish to schedule this at a time when the most viewers can watch it, like 9 'o clock on a Friday night.

When generating your server manifest you schedule the start time using the option --vod2live_start_time.

--vod2live_start_time

Using this option when creating your server manifest restricts the availability time of the channel. Defaults to the time at which the Live server manifest is created.

If the VOD2Live channel has been set up and a request is made to Origin before the specified start time, the client receives a 404 and a log message (FMP4_404 VOD2Live starts at 2021-03-22T21:00:00Z) is written to the Apache error log.

The given time must be formatted as either ISO 8601 (2021-03-22T21:00:00Z) or seconds since Unix epoch (1616446800):

 #!/bin/bash

 mp4split -o vod2live.isml \
   --vod2live \
   --vod2live_start_time=2021-03-22T21:00:00Z \
   --dvr_window_length=600 \
   --hls.client_manifest_version=4 \
   --hls.no_multiplex \
   remixed.mp4

Attention

It is important to note that timing is specified in UTC (Universal Time). Do not forget to convert local times to UTC.