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 EventStream
XML 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 payloadEXT-OATCLS-SCTE35
markers with binary SCTE35 payloadEXT-X-SPLICEPOINT-SCTE35
markers with binary SCTE35 payloadEXT-X-CUE-OUT
&EXT-X-CUE-IN
markers 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
orDURATION
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 aDURATION
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.
Updated about 1 month ago