A cue tone is how a live stream says an ad break starts here. It began life as an audible DTMF sequence on the audio path and became a structured data message carried inside the transport stream. Working out which of those two you actually have is usually the first step in fixing a break that lands in the wrong place.
Before anything was digital, a national broadcaster needed a way to tell hundreds of local affiliates that the next two minutes belonged to them. The solution was blunt and it worked: play a DTMF tone sequence down the audio path. Equipment at the affiliate listened for that sequence, cut to local advertising, and cut back when it heard the return tone. That is the original cue tone, and the term stuck.
SCTE-35 is the standardised replacement. Instead of a sound, the stream carries a splice_info_section — a small binary structure multiplexed into the transport stream on its own PID. It says the same thing the tone said, but with a precision the tone never had: exactly when, for exactly how long, whether this is a break you are permitted to replace, and what kind of boundary it actually is.
The consequence for anyone running a channel today is worth stating plainly. The tone was advisory and a human usually acted on it. The SCTE-35 message is machine-readable and something downstream is expected to act on it automatically, unattended, at three in the morning. When that automation misfires, the cause is nearly always in the message rather than in the advert.
| Field | What it means | Why it matters to you |
|---|---|---|
| splice_insert | The classic command: a break starts, and here is its duration | Simple and widely supported. If your chain is older, this is probably what you have. |
| time_signal | A timestamp plus one or more segmentation descriptors | The modern form. Richer, because the descriptor says what kind of boundary this is, not merely that there is one. |
| pts_time | The splice point on the 90 kHz presentation clock | The most common single source of a break landing early or late. Any hop that re-stamps timestamps can move it. |
| break_duration | How long the opportunity lasts | Determines how much inventory you can sell into it. A missing duration means the return has to come from a separate cue-in. |
| out_of_network_indicator | Whether the stream is leaving your programme | The flag that says you may replace this. Set false, a downstream system is being told not to splice. |
| pre_roll | Advance warning before the splice point | Gives a splicer time to prepare. Applied twice by two hops, your break lands early by exactly that amount. |
| segmentation_type_id | The kind of boundary: provider ad start, programme start, chapter, and so on | Lets you honour some breaks and ignore others rather than treating every cue as sellable inventory. |
| DTMF descriptor | A legacy tone sequence carried inside the modern message | How a chain keeps a legacy splicer alive while everything upstream has moved to SCTE-35. |
A viewer never sees a splice_info_section. By the time the stream is HLS, the packager has translated the cue into playlist tags — and that translation is where most cues are lost, because every hop is allowed to rewrite a playlist and drop tags it does not recognise.
#EXT-X-CUE-OUT:30.000
#EXTINF:6.000,
segment_142.ts
...
#EXT-X-CUE-IN
#EXT-X-DATERANGE:ID="break-7",START-DATE="2026-09-07T14:32:10.000Z",DURATION=30.0,SCTE35-OUT=0xFC302F...
#EXT-OATCLS-SCTE35:/DA0AAAAAAAAA...
#EXT-X-CUE-OUT:30.000All three say the same thing. Which one you get depends entirely on the packager, and a player or ad system that understands one form may quietly ignore another. That is worth knowing before you conclude the encoder is at fault — the cue may be present in a form nothing downstream was ever configured to read.
Easy to assume, easy to check. Many encoders emit SCTE-35 only when an explicit cue PID is configured, and default to silence.
Re-segmentation rewrites the playlist. A packager that does not understand a tag has no obligation to carry it forward, and most do not.
A cached playlist from before the break is a correct answer to the wrong question. Check the age of what your player actually received.
A re-stamped PTS or a doubly applied pre-roll moves the splice point. The cue arrives intact and fires at the wrong moment.
A DATERANGE cue in a chain configured to look only for CUE-OUT is invisible. The signal is fine; the reader is looking for the other form.
A CUE-OUT with no matching CUE-IN leaves the break open. Downstream that is either an endless ad state or a silently ignored cue.
The order matters. Each of these is cheaper to rule out than the one after it, and every one of them has been the answer at least once. Working from the player backwards rather than from the encoder forwards usually finds it faster, because the playlist your player received is a fact, while what the encoder claims to have sent is a report.
This is worth saying plainly, because a lot of channels spend weeks on SCTE-35 before asking the question: if your breaks do not have to land on a specific editorial moment, you do not need cue tones. A schedule — a spot every ten minutes, a sponsor L-bar for a whole second half — inserts perfectly well without a single marker, and that is how most of the channels we work with begin.
Cues earn their complexity when the break must be exact: the real whistle, the real end of the over, a contractual break you are required to honour to the second. At that point the signalling is the product and it is worth getting right. Until then it is a dependency you have not needed yet, and treating it as a prerequisite delays revenue for no return.
If you want to know which of those two situations you are in, send one live playlist URL. We will tell you what cues are actually in it, in what form, and whether they pair — see the SCTE-35 marking and detection page for what that inspection covers, or the validator page for the specific checks worth running against your own stream first.
A cue tone is the signal that tells everything downstream that an advertising break is about to start or end. The name is inherited from analogue television, where the signal really was an audible tone — a DTMF sequence played down the audio path so an affiliate station knew when to cut to local advertising. SCTE-35 replaced the sound with data: a splice_info_section carried in the transport stream, which says the same thing far more precisely and can be acted on automatically.
In practice people use them interchangeably, but they are different layers. The cue message is the SCTE-35 splice_info_section itself — the structured payload with a splice command, a timing reference and optional descriptors. The cue tone is the older idea of an audible or in-band trigger. When someone says their cue tones are not coming through, they almost always mean the SCTE-35 messages are being dropped somewhere between the encoder and the player.
They coexist. Many broadcast chains in the field still emit DTMF sequences alongside or instead of SCTE-35, because a legacy splicer downstream expects them. SCTE-35 accommodates this with a DTMF descriptor, so a single cue message can carry both the modern structured signal and the legacy tone sequence for equipment that only understands the old way.
Almost always a timing-reference problem rather than a missing cue. SCTE-35 carries a pts_time on a 90 kHz clock, plus an optional pre-roll — deliberate advance warning so a downstream splicer has time to prepare. If a hop in the chain re-stamps timestamps, or if the pre-roll is applied twice, or if the packager rounds the splice point to the nearest segment boundary, the break lands early or late by exactly the amount you would predict from that segment duration.
Pull the media playlist and look for the tags that carry the signal into HLS: EXT-X-CUE-OUT and EXT-X-CUE-IN, EXT-X-DATERANGE with SCTE-35 attributes, or the OATCLS-SCTE35 form that several commercial packagers emit. If none of those are present in the playlist your player receives, the cue did not survive the chain, no matter what the encoder reports.
No. Schedule-driven insertion — a spot every ten minutes, or a sponsor overlay for a whole match — needs no cues at all, and that is how most channels start. Cue tones matter when the break must land on a real editorial boundary: the actual whistle, the actual end of the segment, a break your rights agreement requires you to honour exactly.
The hub page: how we write cues into a playlist and read the cues already in one.
The exact tags a cue turns into by the time it reaches your player.
What actually happens between a cue arriving and an advert appearing on screen.
You get a plain report: which cues are present, whether every break opens and closes, whether the durations agree, and the first hop where the signal disappears. One URL, one working day, and no obligation to buy anything.

Video-technology engineer in Thane, India. Send me one live stream URL and I will run a free test on your own feed. You get my reply within one working day (IST), from the person who builds it, not a sales queue.
Send us one live URL and what you want on it. We will put a demo on your own feed before you commit to anything.