PLAYDECK can send SCTE markers with clip and block commands. It can also listen for incoming SCTE-35 or SCTE-104 and jump into a Break Block when a marker matches.
That is useful when an upstream encoder, automation, or another PLAYDECK channel fires the OUT cue — and you want your ad block to start automatically, then return when the break is over.
You need an SCTE license. The block must be a Break Block (Block End → Break), so PLAYDECK knows where to return after the ads.
In this article:
→ Open the SCTE Trigger editor
→ How matching works
→ Start Time
→ Block Duration modes
→ Quick recipe (typical FAST / server cue)
→ Related
Open the SCTE Trigger editor
Select the Break Block header and open Edit SCTE Trigger (playlist shows a small SCTE hint when triggers are saved).
Each trigger has:
- SCTE OUT — Play this Block — pattern(s) that start the Break
- SCTE IN — Return — optional pattern(s) that end the Break early (depending on duration mode)
- Start Time — when the Break starts after an OUT match
- Block Duration — how long the Break runs before return
Use SCTE Logs in the dialog (or Logs → SCTE) while testing.

How matching works
Put one match string per line in the OUT and IN memos. Every non-empty line must appear in the incoming marker text (All lines = AND). Spaces and quotes are ignored. Samples for SCTE-35 / SCTE-104 (and duration variants) are in the dialog — use them as a starting point, then trim to what your feed really sends.
The OUT pattern must match what PLAYDECK actually receives. Open Logs → SCTE while testing. Lines starting with << show the inbound cue — copy distinctive fragments into your match lines.
Examples of fragments people often match:
- SCTE-35 immediate OUT: SpliceInfoSection, SpliceInsert, outOfNetworkIndicator=”1″, spliceImmediateFlag=”1″
- SCTE-35 IN: SpliceInfoSection, SpliceInsert, outOfNetworkIndicator=”0″
- SCTE-104 OUT (decoded inbound, not raw hex data): SCTE-104, multiple_operation_message, opID 257, splice_insert_type 2
- SCTE-35 timed start with ptsTime (for example TimeSignal): SpliceInfoSection, TimeSignal, ptsTime
If your OUT pattern still requires spliceImmediateFlag="1", a cue with Flag="0" or a TimeSignal-only marker will never fire. Always align the pattern with a real << line from your log.
Triggers react only to inbound << cues, not to >> send lines alone. For a loopback test, the listening input must see the stream that carries the marker.
Start Time
When the OUT pattern matches, Start Time decides when the Break Block actually starts.
| Mode | What happens |
|---|---|
| Immediately after arrival | Start the Break as soon as the OUT pattern matches (default). |
| Delay from SCTE cue (pre-roll / PTS / timestamp) | Read a start delay from the cue (see below). If nothing usable is found, PLAYDECK starts now and writes a note in the SCTE log. |
| Fixed Delay (MM:SS:FF) | Wait this long after the match, then start. FF is handled like show duration, then applied using the channel frame rate. |
Delay from SCTE cue — what is read
SCTE-104
pre_roll_timein milliseconds- and/or
<timestamp>:time_type0 = process now; 1 = UTC (NTP); 2 = VITC-style wall-clock (hours / minutes / seconds / frames) - Effective delay = time until that moment (if still in the future) plus pre-roll
SCTE-35
spliceImmediateFlag="1"→ delay 0 (same as immediate for start)- otherwise
ptsTime/pts_time(90 kHz program clock), compared to the stream clock on the same frame that carried the cue → delay until that point (with a safety cap)
If the target time is already in the past (VITC or PTS), the Break starts immediately.
Not every send path preserves ptsTime on every cue type. What matters in production is whether your << inbound log still contains ptsTime (or 104 pre-roll / timestamp). TimeSignal markers that include ptsTime are a common case for timed SCTE-35 starts.
Block Duration modes
| Mode | What happens |
|---|---|
| Wait for SCTE IN | OUT starts the Break (after Start Time). Return when an IN pattern matches. You must set Pattern IN. |
| Duration from SCTE OUT (break duration) | OUT starts the Break. Return after the break duration carried in that OUT marker: SCTE-35 BreakDuration / duration (90 kHz ticks), or SCTE-104 break_duration (tenths of a second). If no duration is found, PLAYDECK falls back to waiting for IN (if you set one). |
| Fixed Duration | OUT starts the Break. Return after the time you enter (HH:MM:SS). |
| Play until Block end | OUT starts the Break. Return when the Break Block finishes normally (same idea as a scheduled/action Break reaching its end). |
An IN match always returns early and cancels a running timer.
Cues without a break duration (for example many TimeSignal-only markers) need Fixed Duration, Wait for SCTE IN, or Play until Block end — otherwise PLAYDECK has no return path and will log that.
When OUT fires, PLAYDECK remembers the clip that was playing and jumps into the Break. Return uses that saved position (via the Break’s After Break setting / normal return path).
Quick recipe (typical FAST / server cue)
- Commands on clips/blocks/Actions = send SCTE (
>>in the log). See SCTE-35 / SCTE-104 articles. - SCTE Triggers on a Break Block = react to incoming markers (
<<) and drive playout.
Both can live in the same project. A Break can still carry outbound SCTE commands at start/end if your packager also needs markers from PLAYDECK.
For live ingest that must survive the Break, use a permanent Channel Input (not a playlist stream URL) — see Ad Breaks.
Typical setups
- Server sends immediate SCTE-35 OUT → Start Time: Immediately after arrival; Duration: from SCTE OUT, or Fixed / Wait for IN
- SCTE-104 with pre-roll or timestamp → Start Time: Delay from SCTE cue; Duration as needed
- SCTE-35 with
ptsTimein the inbound cue → Start Time: Delay from SCTE cue; OUT pattern must match that cue (not onlyFlag="1"); Duration often Fixed or Wait for IN if the marker has no break duration
While testing
>>in the log = something was sent<<= PLAYDECK received a cueOUT/DELAY,OUT/PLAY,START/PLAY,IN/RETURN,TIMER/RETURN= trigger actions
Related
| Article | Topic |
|---|---|
| Closed Captions & SCTE — Overview | Full matrix, domains, embed flags |
| Sending SCTE-35 to a stream server | UDP/SRT/DVB, Nimble, HLS |
| Closed Captions & Subtitles | CC burn-in / pass-through |
| Recording CC & SCTE | MKV vs TS, sidecars, playback checks |
| Using SCTE-104 on SDI | SDI VANC markers |