Live Stream Ad Markers (SCTE-35)
If you bring your own live stream — an external HLS or DASH manifest from your own encoder or CDN — you can control exactly where ad breaks happen by embedding SCTE-35 ad markers in the manifest. Vidori’s player detects these markers and plays an ad at each break, then resumes your live content.
How it works
Section titled “How it works”-
Set up your ad tag. Under Settings → Advertising, configure your VAST tag URL and make sure advertising is enabled. Your markers decide when a break happens; your ad settings decide what plays. See Advertising for details.
-
Embed ad markers in your manifest. Your encoder or origin adds SCTE-35 cue-out / cue-in markers at each ad opportunity (see the examples below).
-
Vidori inserts the ads. When playback reaches a marker, the player pauses the live feed, plays the ad, and returns to the live edge when the ad finishes.
Adding markers to your manifest
Section titled “Adding markers to your manifest”Vidori reads standards-compliant #EXT-X-DATERANGE tags in your live media
playlist. Mark the start of a break with SCTE35-OUT and a
PLANNED-DURATION (in seconds), and the end with SCTE35-IN:
#EXTINF:6.000,segment-1001.ts#EXT-X-DATERANGE:ID="break-1",START-DATE="2026-07-08T20:15:00.000Z",PLANNED-DURATION=30.0,SCTE35-OUT=0xFC30...#EXTINF:6.000,segment-1002.ts#EXTINF:6.000,segment-1003.ts#EXT-X-DATERANGE:ID="break-1",START-DATE="2026-07-08T20:15:30.000Z",SCTE35-IN=0xFC30...#EXTINF:6.000,segment-1004.tsFor DASH, signal breaks with an in-manifest EventStream carrying the
SCTE-35 payload, with a presentationTime and duration:
<EventStream schemeIdUri="urn:scte:scte35:2013:xml" timescale="90000"> <Event presentationTime="..." duration="2700000" id="1"> <scte35:SpliceInfoSection> <scte35:SpliceInsert outOfNetworkIndicator="true" spliceEventId="1"> <scte35:BreakDuration duration="2700000"/> </scte35:SpliceInsert> </scte35:SpliceInfoSection> </Event></EventStream>Supported markers
Section titled “Supported markers”| Marker | Supported |
|---|---|
HLS #EXT-X-DATERANGE with SCTE35-OUT / SCTE35-IN | Yes |
HLS #EXT-X-DATERANGE with a PLANNED-DURATION / DURATION | Yes |
DASH EventStream / emsg SCTE-35 | Yes |
HLS #EXT-X-CUE-OUT / #EXT-X-CUE-IN (legacy) | Not yet |
#EXT-OATCLS-SCTE35 / raw binary-only payloads | Not yet |
Troubleshooting
Section titled “Troubleshooting”-
No ads play. Confirm advertising is enabled under Settings → Advertising and that your VAST tag returns an ad. A break with no available ad simply stays on live content — there is no black screen.
-
The same ad plays twice. Make sure every
#EXT-X-DATERANGEuses a stable, uniqueID. -
A viewer who joins mid-break sees content, not the ad. This is expected — viewers who join after a break has started are not pulled into an in-progress ad.