Ad Break Timing and Cue Points: SCTE-35 for FAST Operators
At a glance
If your stream does not signal breaks correctly, SSAI cannot safely insert ads, and platforms may ignore or reject your breaks. Most “we have demand but no revenue” incidents trace back to bad break signaling or break timing.
Who this is for
- FAST operators defining ad load and break placement
- Playout/encoding teams inserting cue markers
- Ad ops teams troubleshooting low fill or zero impressions
What operators should know (non-technical)
- An “ad break” is not just a creative decision. It must be machine-readable.
- SCTE-35 is the standard way to mark “break starts now” and “break ends now.”
- Consistency matters: if your breaks wander (e.g., 78 seconds instead of 90), you get mismatch errors and lost fill.
Key terms
- SCTE-35: A cueing message standard used to signal splice points for ad insertion and program control.
- Cue-in: Marker indicating the start of a break.
- Cue-out: Marker indicating the end of a break (or a duration declared in the cue-in).
- Splice point: The exact frame/segment boundary where a break begins or ends.
Responsibility boundaries
| Task | You (operator / engineering) | SSAI / platform |
|---|---|---|
| Insert SCTE-35 markers | Yes | No |
| Detect markers and create ad opportunities | Config + validation | Yes (SSAI behavior) |
| Enforce device/platform break rules | Align your break policy | Yes (policy enforcement varies) |
Walkthrough: From cue marker to monetized pod
- Playout emits SCTE-35 at a clean segment boundary (HLS/DASH segment alignment matters).
- SSAI reads cue-in and opens an ad pod for a declared duration (or waits for cue-out).
- SSAI requests ads sized to the pod duration (e.g., 90s pod → three 30s ads or other combinations).
- SSAI stitches ads and returns a modified manifest (per viewer, in most SSAI systems).
- Player downloads segments and playback proceeds without client-side ad calls.
Operational rules that keep you out of trouble
1) Standardize pod durations
- Pick a small set of pod durations and stick to them.
- Ensure your schedule, SCTE markers, and SSAI “pod config” all match the same policy.
2) Always close the break cleanly
- If your workflow uses cue-out, missing cue-out is a top reason pods “never close” and the stream drifts.
- If your workflow declares duration in cue-in, validate that the declared duration matches actual playout.
3) Align SCTE timing with segment boundaries
- Bad boundary alignment can create manifest discontinuities and device playback failures.
- This is where encoder settings (GOP, segment duration) and cue insertion must match.
Real-world break maps (examples)
Example 1: Episodic channel (30-min show)
00:00:00 Program start (no ads for first 120s)
00:10:30 Break 1 (90s) [cue-in] ... [cue-out]
00:20:45 Break 2 (90s) [cue-in] ... [cue-out]
00:29:30 Between-episode break (60s) [cue-in] ... [cue-out]
Example 2: News loop / talk block (continuous)
Break cadence: every 8–10 minutes
Pod length: 60s
Rule: never break during lower-third graphics transitions (platform QA failure risk)
Examples you can paste into tickets
Example: “SCTE-35 issue” information to request from engineering
Channel ID:
Time window (UTC):
Playback URL used:
Expected break time(s):
Observed behavior (no ads / wrong length / glitch):
Encoder settings (segment duration, GOP size):
SCTE-35 output sample (base64/hex if available):
SSAI logs around cue detection:
Example: Break policy (for programming + ad ops alignment)
| Program type | Break cadence | Pod length | Max single ad |
|---|---|---|---|
| Movies | Every ~12 minutes | 120 seconds | 30 seconds |
| Episodic | 2–4 breaks per episode | 90 seconds | 30 seconds |
| Short-form blocks | Between items only | 60 seconds | 15–30 seconds |
Example: “SCTE sanity checklist” for QA
- Every cue-in has a matching cue-out (or a declared duration that matches reality).
- No overlapping breaks.
- No breaks inside restricted zones (platform-specific).
- Break start/end aligned to segment boundaries.
Troubleshooting
| Problem | What to check | Quick fix |
|---|---|---|
| Ads never appear | Are SCTE markers present? Is SSAI configured to listen for them? | Verify cue insertion; confirm SSAI cue ingestion; inspect SSAI logs for “cue detected” events |
| Ads appear but break lengths are wrong | Declared duration vs actual playout | Standardize pod length; enforce creative duration; add validation on stitch output |
| Playback glitches at breaks | Discontinuities, segment/GOP alignment, codec changes | Align encoding ladder; keep ad creative specs compatible with content ladder |
Sources
- IAB Tech Lab – VAST 4.2 (PDF)
- IAB Tech Lab – OpenRTB 2.6 (PDF)
- IAB Tech Lab – OpenRTB SupplyChain Object (schain) (GitHub)
- IAB Tech Lab – ads.txt overview
- IAB Tech Lab – ads.txt 1.1 (PDF)
- IAB Tech Lab – app-ads.txt 1.0 (PDF)
- IAB Tech Lab – sellers.json overview
- IAB Tech Lab – sellers.json (PDF)
- IAB – Digital Video Ad Measurement Guidelines
- MRC – SSAI & OTT Guidance (PDF)
- MRC – Viewable Ad Impression Measurement Guidelines v2.0 (PDF)
- Google Ad Manager – Connected TV ads
- Google Ad Manager – Dynamic Ad Insertion (DAI) for Developers
- Google Ad Manager – Full-service DAI
- AWS Elemental MediaTailor Documentation
- AWS MediaTailor – SSAI CDN architecture overview
- Apple Developer – HTTP Live Streaming (HLS)
- Apple Developer – HLS Authoring Specification
- ISO – ISO/IEC 23009-1:2022 (MPEG-DASH) page
- MPEG – Standards overview (includes MPEG-DASH)
- Roku Developer – Integrating Roku Ad Framework (RAF)
- Roku Developer – Implementing SSAI using Roku adapters
- SCTE – SCTE-35 catalog page
- ANSI preview – ANSI/SCTE 35 2017 (preview PDF)
- Comscore – CTV Measurement
- Nielsen – Connected TV insights (May 2025)
- FreeWheel – Publisher Suite overview
- FreeWheel Enterprise API docs
- IAB Tech Lab – VPAID (deprecated) page
- Bitmovin – SCTE-35 guide (industry explainer)
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article