Using SCTE-104 on SDI

On SDI, PLAYDECK uses SCTE-104 markers in VANC (not SCTE-35). Use SCTE-104 to signal ad inserts / splice points to downstream SDI equipment.

For the full matrix (including streams, recording, NDI) see:
Closed Captions & SCTE — Overview

For IP / MPEG-TS markers, use SCTE-35 instead: Sending SCTE-35 to a stream server.

In this article:
SDI vs streams
Enable SCTE-104 on SDI
Send SCTE-104
Detect and log
SDI loop test
Forwarding
Important limit (CC / ASS track)
Related


SDI vs streams

ConnectionSCTE type
SDI (DeckLink, etc.)SCTE-104 only (VANC)
UDP / SRT / DVB / TS file / HLS segmentsSCTE-35 only

PLAYDECK does not convert SCTE-104 ↔ SCTE-35 automatically.
If you go SDI → IP stream, SCTE-104 will not appear as SCTE-35 on the stream. Fire SCTE-35 on the channel that owns the stream output (see overview and SCTE-35).


Enable SCTE-104 on SDI

Input

On the SDI input, enable VANC Data → Enable Closed Captions and SCTE-104 Triggers.

Same checkbox as Closed Captions capture. It is opt-in because VANC capture adds processing load.

Output

With a license that includes SCTE / CC, SDI output can carry VANC including SCTE-104 when markers are present on the channel.


Send SCTE-104

Attach SCTE commands to clips, blocks, overlays, or Action buttons. Set the command type to SCTE-104 and paste XML your SDI gear expects.

PLAYDECK does not convert SCTE-104 ↔ SCTE-35. If the same break must hit SDI and an IP stream, fire two commands (104 on SDI, 35 on the stream channel).

The Commands dialog has SCTE-104 Out / In samples. One break = one ID: Out uses {eventidhex}, In uses {eventlastidhex}. Duration in 104 is tenths of a second as 4-digit hex ({blockduration10hex}), not the 90 kHz number from SCTE-35.

<SCTE35_protocol_version>0</SCTE35_protocol_version> is a normal field in a 104 multiple_operation_message (the splice op is SCTE-35 protocol version 0). It does not mean PLAYDECK is sending SCTE-35 on SDI. <protocol_version>1</protocol_version> is the 104 message version.

SCTE-104 Out (splice request, opID 257)

Typical on block starttime_type 0 = immediate (no pre-roll clock).

<SCTE104 line=12>
  <multiple_operation_message>
    <protocol_version>1</protocol_version>
    <AS_index>0</AS_index>
    <message_number>1</message_number>
    <DPI_PID_index>1</DPI_PID_index>
    <SCTE35_protocol_version>0</SCTE35_protocol_version>
    <timestamp>
      <time_type>0</time_type>
    </timestamp>
    <ops>
      <op>
        <opID>257</opID>
        <data>02 {eventidhex} 00010000 {blockduration10hex} 010101</data>
      </op>
    </ops>
  </multiple_operation_message>
</SCTE104>
SCTE-104 In

Block end. Same ID, no duration in the data.

<SCTE104 line=12>
  <multiple_operation_message>
    <protocol_version>1</protocol_version>
    <AS_index>0</AS_index>
    <message_number>1</message_number>
    <DPI_PID_index>1</DPI_PID_index>
    <SCTE35_protocol_version>0</SCTE35_protocol_version>
    <timestamp>
      <time_type>0</time_type>
    </timestamp>
    <ops>
      <op>
        <opID>257</opID>
        <data>04 {eventlastidhex} 00010000 0000 010100</data>
      </op>
    </ops>
  </multiple_operation_message>
</SCTE104>


Adjust line=AS_indexDPI_PID_index and the <data> layout to whatever your inserter documents. Placeholders are listed on Sending SCTE-35 to Streams & Servers.


Detect and log

Open the SCTE Event Log (Logs → SCTE).

  • >> = marker sent on that channel
  • << = marker detected on a receiving playlist (e.g. SDI input playing in another channel)

Logging both directions is the fastest way to verify a loop without external analyzers.


SDI loop test

  1. Channel 1: SDI output active.
  2. Physical loop (or second port) into an SDI input; enable VANC Data on that input.
  3. Channel 2: play that input in the playlist.
  4. Channel 1: Action button with SCTE-104 sample; both channels playing.
  5. Event Log: >> on Ch1 and << SCTE-104 on Ch2.

You can add a second SDI hop (Ch2 → Ch3) to confirm forwarding on SDI.


Forwarding 

PLAYDECK can forward incoming SCTE-104 from an SDI input to an SDI output when that input is played through a channel that drives SDI out.

Forwarding SDI (104) UDP/SRT (35) does not happen automatically. Use SCTE-35 on the streaming channel instead.


Important limit (CC / ASS track)

If Channel 1 is playing a clip with an active Closed Caption or ASS text track, SCTE-104 on SDI may only be received intermittently (>> still looks fine; << on the loop is unreliable).

Workaround: turn the text track off when SCTE-104 on SDI must be reliable.

This conflict was not observed for SCTE-35 on MPEG-TS streams in the same way.

Related

ArticleTopic
Closed Captions & SCTE — OverviewFull matrix, domains, embed flags
Sending SCTE-35 to a stream serverUDP/SRT/DVB, Nimble, HLS
Closed Captions & SubtitlesCC burn-in / pass-through
Recording CC & SCTEMKV vs TS, sidecars, playback checks