Create a looping / rotating playlist for VOD2Live¶
Table of Contents
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:
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
--vod2liveoption 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.
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
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.
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
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.
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
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
(all other Live ingest options, such as those related to archiving, are
#!/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).
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
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.
Currently, this option only sets the time at which a stream becomes available (i.e., before the specified time any request will be responded to with a 404). It does not ensure that the stream will start at the beginning of the playlist at the specified 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
The given time must be formatted as either ISO 8601
2021-03-22T21:00:00Z) or seconds since Unix epoch (
#!/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
It is important to note that timing is specified in UTC (Universal Time). Do not forget to convert local times to UTC.