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, 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
- 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 a duration and start-timeEXT-OATCLS-SCTE35
markers with a duration and start-timeEXT-X-CUE-OUT/IN
markers without payload and with a duration (but without attributeduration
)
Supported markers in HLS are officials EXT-X-DATERANGE:ID
markers and EXT-OATCLS-SCTE35
markers.
DATERANGE markers - Example:
#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
#EXTINF:6.000,
index_4_217519.ts?m=1660741368
#EXTINF:6.000,
index_4_217520.ts?m=1660741368
#EXTINF:6.000,
index_4_217521.ts?m=1660741368
#EXTINF:6.000,
index_4_217522.ts?m=1660741368
#EXTINF:2.760,
index_4_217523.ts?m=1660741368
#EXTINF:5.240,
index_4_217524.ts?m=1660741368
Some mandatory requirements when using 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
OATCLS markers - Example:
#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/725449020000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449026000.ts
#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
#EXTINF:6.000,
video_1080p_1000010996/725449056000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449062000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449068000.ts
Some information when using OATCLS 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 important. - The duration of the break must be specified inside the payload
CUE-OUT/CUE-IN markers - Example:
#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/725449020000.ts
#EXTINF:6.000,
video_1080p_1000010996/725449026000.ts
#EXTINF:6.000,
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
Some information when using CUE-OUT/CUE-IN markers
- The start-time of the markers is not taken from the media manifest, based on
EXT-X-PROGRAM-DATETIME
value and the position of the marker in the playlist. - The
#EXT-X-CUE-OUT
must not come with the attributeduration
as not supported.
Ex:#EXT-X-CUE-OUT:DURATION=20.75
will not work. - No payload should be associated to the marker.
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
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 list of segmentation_type_id
supported by the broadpeak.io is :
- 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