SCTE-35 (ANSI/SCTE 35 2013) is a joint ANSI/Society of Cable Telecommunications Engineers standard that describes the inline insertion of cue tones in mpeg-ts streams. The full standard name is "Digital Program Insertion Cueing Message for Cable."
SCTE-35 was originally used in the US to signal a local ad insertion opportunity in the transport streams, and in Europe to insert local TV programs (e.g. local news transmissions). It is now used to signal all kinds of program and ad events in linear transport streams and in newer ABR delivery formats such as HLS and DASH.
Work on splicing GOP compressed video streams was started by SMPTE ST 312M Television - Splice Points for MPEG-2 Transport Streams. This standard had some basic signaling and details on how to perform seamless and near seamless splicing of compressed streams. Although it mainly worked on constant bit rate streams, and in the cable industry the digital feeds were moving to a statistical multiplex format. A company called Imedia developed an MPEG splicer and along with a company called SkyConnect they demonstrated a splice of ad content in to a statistically multiplexed stream.
A few of the cable proponents for the SMPTE 312M standard then moved the standards process for signaling to SCTE and formed the DPI ad hoc group. Using SMPTE 312M as a base, they modified the standard to work better for signalling local ad insertion splice points and added a minimal additional amount of data to be able to start sending more information about the splice. This became the first version of SCTE 35. SCTE 35 was written without examples or much explanatory text as that was relegated to the SCTE 67 guide document.
A few years later Time Warner formed a company called MystroTV to develop a network DVR solution. This required accurate signaling of program and ad boundaries for proper recording, and more importantly, not recording programs that the programmer or operator did not have rights to. They were also interested in signaling both programmer and distributor advertising avails. This was accomplished by adding the time_signal command which was basically a splice_insert, but had all of the extraneous data removed. They then added a segmentation_descriptor to be able to signal an extensible number of events and associate that with the time_signal command for accurate splice points.
Some programmers decided to overload the original splice_insert command rather than add standardized elements for what they wanted to do and this created some diverse interpretations on how to handle certain events. Quite a bit of time was taken in SCTE 35 2019r1 to add some examples and more explanatory text on how to use the standard.