SCTE-35 markers

Considerations for signaling ad insertion opportunities in source manifests

Live streams

Ad Replacement in Live streams can be achieved thanks to in-band signaling such as SCTE-35 Markers. broadpeak.io has specific requirements around the signalling of these markers in MPEG-DASH and HLS manifests, but also around the SCTE-35 Payload content that are worth noting.

SCTE-35 Signalling in MPEG-DASH Manifest

📘

Supported Markers

  • SCTE-35 markers are either urn:scte:scte35:2014:xml+bin or urn:scte:scte35:2013:xml

For Live Ad replacement, broadpeak.io relies on in-band markers to detect the beginning of an Ad in the stream. splice insert et time signal cue-out types are supported.

SCTE-35 Requirements

For both "urn:scte:scte35:2013:xml" and "urn:scte:scte35:2014:xml+bin":

  • The Event@messageData attribute must not be used.
  • The sum of Event@presentationTime (=epochTime x timescale) and Event@duration (seconds x timescale) must never exceed the period duration, if known at the time of creation. An event whose Event@presentationTime is later than the end of the period due to an MPD update must be ignored.
  • There should not be more than one SCTE-35 MPD event with an identical value of the Event@presentationTime attribute.

Presentation of the Manifest

In single period mode, the marker is signalled inside an EventStreamXML node parent, as Event element. Event elements must carry an XML and/or a binary representation of the SCTE-35 cue message.

SCTE-35 Marker's type

Supported SCTE-35 markers are the following:

  • urn:scte:scte35:2014:xml+bin
  • urn:scte:scte35:2013:xml

XML SCTE-35 Event

Example:

<EventStream timescale="90000" schemeIdUri="urn:scte:scte35:2013:xml">
  <Event duration="2699769">
    <scte35:SpliceInfoSection protocolVersion="0" ptsAdjustment="8586003992" tier="4095">
      <scte35:SpliceInsert spliceEventId="1" spliceEventCancelIndicator="false" outOfNetworkIndicator="true" spliceImmediateFlag="false" uniqueProgramId="1" availNum="1" availsExpected="1">
        <scte35:Program>
          <scte35:SpliceTime ptsTime="2346545680"/>
          </scte35:Program>
        <scte35:BreakDuration autoReturn="true" duration="2699769"/>
      </scte35:SpliceInsert>
    </scte35:SpliceInfoSection>
  </Event>
</EventStream>

Base-64 encoded SCTE-35 Event

Example:

<EventStream
      schemeIdUri="urn:scte:scte35:2014:xml+bin"
      timescale="10000000">
      <Event
        presentationTime="15516962501159406"
        id="3999785549">
        <Signal xmlns="http://www.scte.org/schemas/35/2016"> 
           <Binary>/DAnAAAAAAAAAP/wBQb/Y/SedwARAg9DVUVJAAAAPH+/AAAjAQEGLc/Q
           </Binary>
        </Signal>
      </Event>
</EventStream>

SCTE-35 signalling in HLS Manifest

📘

Supported markers

  • EXT-X-DATERANGE markers with start time, duration and hexadecimal-encoded SCTE35 payload
  • EXT-OATCLS-SCTE35markers with binary SCTE35 payload
  • EXT-X-SPLICEPOINT-SCTE35markers with binary SCTE35 payload
  • EXT-X-CUE-OUT & EXT-X-CUE-INmarkers with and without a duration

EXT-X-DATERANGE markers

  • each marker ID must be unique
  • the START-DATE must be specified in clear or inside the payload
  • the duration of the break should be specified under PLANNED-DURATION or DURATION in clear ,or inside the payload
  • there must be a SCTE35-OUT or SCTE35-CMD attribute with a hexadecimal-encoded SCTE35 payload
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:217514
#EXT-X-DISCONTINUITY-SEQUENCE:21
#EXT-X-PROGRAM-DATE-TIME:2022-09-20T08:43:59.640Z
#EXTINF:6.000,
index_4_217514.ts?m=1660741368
#EXTINF:3.760,
index_4_217515.ts?m=1660741368
#EXT-X-DATERANGE:ID="18",START-DATE="2022-09-20T08:44:09.400Z",PLANNED-DURATION=45.000,SCTE35-OUT=0xFC302F00015CE9AA1800FFF01405000000127FEFFEE51CEE007E003DCC50000112FF000A00084355454900000012C2A52C21
#EXTINF:6.240,
index_4_217516.ts?m=1660741368
#EXTINF:6.000,
index_4_217517.ts?m=1660741368
#EXTINF:6.000,
index_4_217518.ts?m=1660741368

EXT-OATCLS-SCTE35 markers

  • The start-time of the markers is not taken from the payload, but computed from the media manifest, based on EXT-X-PROGRAM-DATETIME value. The placement of the marker in the playlist is therefore important.
  • The duration of the break must be specified inside the payload
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:51098
#EXT-X-PROGRAM-DATE-TIME:2022-12-27T09:37:00.000Z
#EXTINF:6.000,
video_1080p_1000010996/725449032000.ts
#EXTINF:3.240,
video_1080p_1000010996/725449038000.ts
#EXT-OATCLS-SCTE35:/DAqAAAAAAAAAP/wDwUAADTHf//+AKTLgAAAAAAACgAIQ1VFSQAAAAAD+kMv
#EXTINF:2.760,
video_1080p_1000010996/725449041240.ts
#EXTINF:6.000,
video_1080p_1000010996/725449044000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449050000.ts

EXT-X-SPLICEPOINT-SCTE35 markers

  • The start-time of the markers is not taken from the payload, but computed from the media manifest, based on EXT-X-PROGRAM-DATETIME value. The placement of the marker in the playlist is therefore important.
  • The duration of the break must be specified inside the payload
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:51098
#EXT-X-PROGRAM-DATE-TIME:2022-12-27T09:37:00.000Z
#EXTINF:6.000,
video_1080p_1000010996/725449032000.ts
#EXTINF:3.240,
video_1080p_1000010996/725449038000.ts
#EXT-X-SPLICEPOINT-SCTE35:/DAqAAAAAAAAAP/wDwUAADTHf//+AKTLgAAAAAAACgAIQ1VFSQAAAAAD+kMv
#EXTINF:2.760,
video_1080p_1000010996/725449041240.ts
#EXTINF:6.000,
video_1080p_1000010996/725449044000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449050000.ts

EXT-X-CUE-OUT & EXT-X-CUE-IN markers

  • The start-time of the markers is not taken from the media manifest, but based on the nearest EXT-X-PROGRAM-DATETIME value and the position of the marker in the playlist.
  • The #EXT-X-CUE-OUT can carry the duration information either as single value (eg. # EXT-X-CUE-OUT:20.75), or with a DURATION attribute (#EXT-X-CUE-OUT:DURATION=20.75)
  • The markers should not carry a SCTE35 payload. It will be ignored if present.
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:51098
#EXT-X-PROGRAM-DATE-TIME:2022-12-27T09:37:00.000Z
video_1080p_1000010996/725449032000.ts
#EXTINF:3.240,
video_1080p_1000010996/725449038000.ts
#EXT-X-CUE-OUT:20.76
#EXTINF:2.760,
video_1080p_1000010996/725449041240.ts
#EXTINF:6.000,
video_1080p_1000010996/725449044000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449050000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449056000.ts
#EXT-X-CUE-IN
#EXTINF:6.000,
video_1080p_1000010996/725449062000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449068000.ts

SCTE-35 Payload

📘

SCTE-35 Payload

  • Cue-out markers are either splice_insert() or time_signal() commands
  • segmentation_type_id must be 34 (0x22), 48 (0x30), 50 (0x32), 52 (0x34) or 54 (0x36)

Commands

broadpeak.io supports the two following SCTE commands:

  • splice_insert() - 0x05
  • time_signal() - 0x06, which must come with appropriate segmentation descriptors

📘

Note

Both splice_insert() and time_signal() commands triggers the same type of behavior broadpeak.io when associated with the right segmentation_type_id value, which is to perform a VAST request to the Ad server, and to try to insert Creative(s) as per the VAST payload description.

SCTE-35 Segmentation Type Ids

The following segmentation_type_id are detected in the descriptors accompanying the time_signal() command:

  • Break Start - 0x22 (34)
  • Provider Advertisement Start - 0x30 (48)
  • Distributor Advertisement Start - 0x32 (50)
  • Provider Placement Opportunity Start - 0x34 (52)
  • Distributor Placement Opportunity Start - 0x36 (54)

📘

Note

All supported segmentation_type_id values triggers the same type of behavior broadpeak.io when associated with the right SCTE-35 command, which is to perform a VAST request to the Ad server, and to try to insert Creative(s) as per the VAST payload description.

Ad-break duration

If not specified in the signalling itself, or if the value provided in the signalling is not valid, broadpeak.io will look for the Ad break duration within the payload itself.

On-demand streams

🚧

SCTE-35 are not supported on On-demand streams

SCTE-35 markers are only one way to signal mid-roll advertisement placement opportunities into a VOD content, and it is not supported by broadpeak.io. Instead we invite you to use out-of-band type of signaling through VMAP, combined with accurate content conditioning to achieve frame accurate mid-roll advertising on On-demand content.