Insert SCTE 35 for Dynamic Ad Replacement

For ad supported delivery of content you can simply include ads in the playlist that you use for your VOD2Live workflow.

If you would like to integrate with a third-party ad service for dynamic ad replacement, then Remix VOD2Live also supports inserting SCTE 35 markers. This works similarly to Unified Remix - AVOD. For Remix VOD2Live the SCTE 35 markers define the content to be replaced in the playlist.

Keep in mind that both the --timed_metadata and --splice_media need to be enabled when creating the Live server manifest from the remixed MP4. Otherwise, Origin will not include the SCTE 35 Timed Metadata in its output and not slice media segments to align segment boundaries with SCTE 35 cue points either:

 #!/bin/bash

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

The SCTE 35 markers are defined in the playlist. Depending on which part of the playlist you would like to mark as a content replacement opportunity there are two ways of specifying the markers.

Marking a full clip for content replacement

If the content you want replaced is a full clip, then the recommended way is to add two SCTE 35 splice_insert() markers. This pair of markers must share the same spliceEventId.

The first marker has the SpliceInsert@outOfNetworkIndicator field set to 1 (CUE-OUT) and is defined in the clip that is replaced (the start of the slate). The optional field BreakDuration is not used. The second marker has the SpliceInsert@outOfNetworkIndicator field set to 1 (CUE-IN) and is defined in the next clip (the return to the main content).

There is no need to specify the Event@presentation_time for either marker, since both default to the beginning of the clip. The Event@duration shouldn't be specified. When the duration field is unspecified, then Remix calculates the duration of the break. This is important, since Remix aligns the clips for concatenating and this may alter the durations slightly.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?xml version='1.0' encoding='UTF-8'?>
<smil
  xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head />
  <body>
    <seq>
      <par>
        <video src="asset1.mp4" />
      </par>
      <par>
        <video src="slate_30_seconds.mp4" />
        <EventStream
          xmlns="urn:mpeg:dash:schema:mpd:2011"
          schemeIdUri="urn:scte:scte35:2013:xml">
          <Event>
            <Signal
              xmlns="http://www.scte.org/schemas/35/2016">
              <SpliceInfoSection>
                <SpliceInsert
                  spliceEventId="4157"
                  outOfNetworkIndicator="1"
                  spliceImmediateFlag="1">
                  <Program />
                </SpliceInsert>
              </SpliceInfoSection>
            </Signal>
          </Event>
        </EventStream>
      </par>
      <par>
        <video src="asset2.mp4" />
        <EventStream
          xmlns="urn:mpeg:dash:schema:mpd:2011"
          schemeIdUri="urn:scte:scte35:2013:xml">
          <Event>
            <Signal
              xmlns="http://www.scte.org/schemas/35/2016">
              <SpliceInfoSection>
                <SpliceInsert
                  spliceEventId="4157"
                  outOfNetworkIndicator="0"
                  spliceImmediateFlag="1">
                  <Program />
                </SpliceInsert>
              </SpliceInfoSection>
            </Signal>
          </Event>
        </EventStream>
      </par>
    </seq>
  </body>
</smil>

Marking a part of a clip for content replacement

If the content you want replaced is only a segment of the full clip, then an Auto Return Mode break is signaled using a single SCTE 35 splice_insert() marker.

The marker has the SpliceInsert@outOfNetworkIndicator field set to 1 (CUE-OUT) and the BreakDuration@autoReturn field is set to 1 (CUE-IN).

The Event@presentation_time specifies the start time of the break in the clip. The Event@duration must be set to the duration of the break.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version='1.0' encoding='UTF-8'?>
<smil
  xmlns="http://www.w3.org/2001/SMIL20/Language">
  <head />
  <body>
    <seq>
      <par>
        <video src="asset1.mp4" />
      </par>
      <par>
        <video src="asset2_including_30_second_preroll.mp4" />
        <EventStream
          xmlns="urn:mpeg:dash:schema:mpd:2011"
          schemeIdUri="urn:scte:scte35:2013:xml">
          <Event
            presentationTime="0"
            duration="30">
            <Signal
              xmlns="http://www.scte.org/schemas/35/2016">
              <SpliceInfoSection>
                <SpliceInsert
                  spliceEventId="4157"
                  outOfNetworkIndicator="1"
                  spliceImmediateFlag="1">
                  <Program />
                  <BreakDuration
                    autoReturn="1"
                    duration="2700000" />
                </SpliceInsert>
              </SpliceInfoSection>
            </Signal>
          </Event>
        </EventStream>
      </par>
    </seq>
  </body>
</smil>