April 10, 2019

SCTE-35 markers forwarding and passthrough

Nimble Streamer covers wide variety of live streaming scenarios for numerous use cases. Some of them are related to advertising solutions which involve the usage of SCTE-35 markers that need to be delivered through Nimble Streamer without interruption and alternation.

Following the requests from our clients we added support for passing through the SCTE-35 markers from incoming MPEG-TS and HLS streams into output MPEG-TS, HLS and MPEG DASH delivery. So if your original stream has some markers in it, they will be passed through into the outgoing stream.

Enable SCTE-35 processing

To enable any processing of SCTE-35 markers on any Nimble Streamer instance, you need to add the following parameter into Nimble Streamer config file:
scte35_processing_enabled = true
You can read this page to find out how exactly you can make changes to Nimble Streamer config.

This will enable passing SCTE-35 though Nimble Streamer for MPEG-TS and HLS as well as for for Live Transcoder passthrough. SCTE-35 markers ads insertion will not work as well.

If you don't add this parameter, none of those features will work. So please make sure you add that parameter and re-start Nimble Streamer.

Forwarding SCTE-35 markers for HLS and MPEG-TS

Once you enable SCTE-35 processing, Nimble Streamer will start forwarding SCTE-35 markers from HLS and MPEG-TS input streams into output HLS and MPEG-TS streams. Whatever input marker types are used, Nimble will transform them into either of these markers for HLS or their analogs for MPEG-TS:


By default, the DATERANGE marker type is used. If you need to use any other one, use this Nimble parameter to change it:
hls_ad_marker_format = (cue|splicepoint|daterange)
where "cue" means Nimble will use CUE-OUT and CUE-IN markers, "splicepoint" will trigger the SPLICEPOINT-SCTE35 markers and "daterange" will produce DATERANGE markers. Read this page for more details of Nimble Streamer config.

If you need to use any other types of markers, let us know about it.

You may also enable automatic insertion of EXT-X-CUE-OUT-CONT tags after EXT-X-CUE-OUT by using this parameter:
hls_ad_splice_out_cont_marker_enabled = true
When this parameter is active, the system will insert #EXT-X-CUE-OUT tags at the beginning, and it will continue adding #EXT-X-CUE-OUT-CONT tags after each chunk added to the chunklist until a specified Duration is reached. The ElapsedTime field will indicate the time passed since CUE-OUT was inserted. As the Duration time is elapsed, the #EXT-X-CUE-IN tag is inserted.

Forwarding SCTE-35 markers for MPEG-DASH

Nimble Streamer supports forwarding SCTE-35 markers to MPEG-DASH streams in ‘Clear XML’ and  ‘Base64-encoded binary’ formats.

The forwarding to MPEG-DASH output is enabled by adding the next option to nimble.conf
dash_ad_marker_format = <bin|xml>
in addition to the scte35_processing_enabled = true option described earlier. Don’t miss this one, as both options are required for this case.
The xml or bin values allow specifying the "Clear XML" or "Base64-encoded binary" output respectively. Only one can be set at a time.

This feature requires active Addenda license.

Passing SCTE-35 through Live Transcoder

If you need to pass SCTE-35 markers through Live Transcoder you can do it in two possible ways.

You may enable this feature server-wide for all streams being processed via Live Transcoder. Add the following parameter:
scte35_forwarding_enabled = true
Again, read this page to learn more about Nimble config.

You may also control SCTE-35 passthrough for any individual stream in Transcoder scenarios. Let's take a look at a simple scenario which allows keeping original stream as well as make lower resolutions.

Here you see /live/source stream being processed to get /live/output_480p output stream down-scaled to 480p (via Scale filter box) and keep the original rendition as /live/output_original stream.

There are 2 ways of passing the SCTE-35 - via video and via audio pipeline. We'll demonstrate both ways.

The /live/output_original stream has video being passed through - you can see long line with blue-to-orange gradient. This way, if you have full HD stream as input, you won't waste resources decoding and encoding the content to the same rendition. But the audio is split to decoder and encoder. Let's see their settings.

In the source stream decoder you see the enabled Forward SCTE-35 markers checkbox. It enables the transcoder to grab the markers for processing. In audio encoder setting, you click on Expert setup section to see the Forward SCTE-35 markers checkbox again. Check it to make the encoder take the markers which were previously grabbed into the pipeline by the decoder. After saving the transcoder scenario and re-starting the incoming stream, the output will have the SCTE-35 markers in the result stream.

The /live/output_480p stream has audio being passed through while video is transformed to lower rendition. So here we use video pipeline to pass SCTE-35 markers. It's set up the same way - both in decoder and encoder elements.

You need to check Forward SCTE-35 markers checkbox in video decoder and in video encoder settings under Expert setup section. As in case of audio, once you save the scenario and re-start input stream, the output will have the initial SCTE-35 markers.

Notice that scte35_forwarding_enabled=true parameter will override all individual streams' settings and all streams will have their SCTE-35 markers passed through.

Just a reminder: to make Transcoder passthrough work, you need to set scte35_processing_enabled=true for your server as described above.

Ads insertion with Nimble Advertizer

Nimble Streamer has wide support for ads insertion

If you find any issues with SCTE-35 processing, please file us a support ticket so we could help you.

Related documentation

Nimble Streamer live streaming scenarios, Nimble Advertizer, Live TranscoderNimble Streamer configuration referenceNimble Streamer PlayoutInserting ads by Nimble Advertizer using SCTE-35 markersTrigger SCTE-35 marker insertion by Nimble APISCTE-35 markers support in Nimble Streamer Playout