SCTE 35 2023r1 Specification

Syntax Tables and Field Definitions

8. PMT Descriptors

8.1. registration_descriptor()

Used to unambiguously identify programs that comply with the SCTE 35 standard.

SyntaxBitsMnemonic
registration_descriptor() {
  descriptor_tag8uimsbf
  descriptor_length8uimsbf
  SCTE_splice_format_identifier32uimsbf
}

descriptor_tag: 8 bits. Identifies the descriptor. Shall be 0x05.

descriptor_length: 8 bits. Number of bytes following this field. Shall be 0x04.

SCTE_splice_format_identifier: 32 bits. A value of 0x43554549 (ASCII "CUEI") identifies the program as compliant with this standard.

8.2. cue_identifier_descriptor()

Used in the PMT to label PIDs that carry splice commands, differentiating them by the type of commands they carry.

SyntaxBitsMnemonic
cue_identifier_descriptor() {
  descriptor_tag8uimsbf
  descriptor_length8uimsbf
  cue_stream_type8uimsbf
}

descriptor_tag: 8 bits. Identifies the descriptor. Shall be 0x8A.

descriptor_length: 8 bits. Number of bytes following this field. Shall be 0x01.

cue_stream_type: 8 bits. Defines the type of commands carried in the PID stream, as defined in Table 3.

Table 3: cue_stream_type values

cue_stream_typePID usage
0x00splice_insert, splice_null, splice_schedule
0x01All Commands
0x02Segmentation
0x03Tiered Splicing
0x04Tiered Segmentation
0x05-0x7FReserved
0x80-0xFFUser Defined

8.3. stream_identifier_descriptor()

Used in the PMT to label component streams of a service so they can be differentiated.

SyntaxBitsMnemonic
stream_identifier_descriptor() {
  descriptor_tag8uimsbf
  descriptor_length8uimsbf
  component_tag8uimsbf
}

descriptor_tag: 8 bits. Identifies the descriptor. Shall be 0x52.

descriptor_length: 8 bits. Number of bytes following this field. Shall be 0x01.

component_tag: 8 bits. Identifies the component stream. Each stream_identifier_descriptor within a program map section shall have a unique value for this field.

9. Splice Information Table

9.6. splice_info_section()

The main structure for conveying splice command and control information.

SyntaxBitsMnemonicEncrypted
splice_info_section() {
  table_id8uimsbf
  section_syntax_indicator1bslbf
  private_indicator1bslbf
  sap_type2bslbf
  section_length12uimsbf
  protocol_version8uimsbf
  encrypted_packet1bslbf
  encryption_algorithm6uimsbf
  pts_adjustment33uimsbf
  cw_index8uimsbf
  tier12bslbf
  splice_command_length12uimsbf
  splice_command_type8uimsbfE
  if(splice_command_type == 0x00) splice_null()E
  if(splice_command_type == 0x04) splice_schedule()E
  if(splice_command_type == 0x05) splice_insert()E
  if(splice_command_type == 0x06) time_signal()E
  if(splice_command_type == 0x07) bandwidth_reservation()E
  if(splice_command_type == 0xff) private_command()E
  descriptor_loop_length16uimsbfE
  for(i=0; i<N1; i++) splice_descriptor()E
  for(i=0; i<N2; i++) alignment_stuffing8bslbfE
  if(encrypted_packet) E_CRC_3232rpchofE
  CRC_3232rpchof
}

table_id: 8 bits. Shall be 0xFC.

section_syntax_indicator: 1 bit. Shall be '0'.

private_indicator: 1 bit. Shall be '0'.

sap_type: 2 bits. Indicates Stream Access Point type.

section_length: 12 bits. Number of remaining bytes in the section.

protocol_version: 8 bits. Shall be 0.

encrypted_packet: 1 bit. '1' indicates encryption.

encryption_algorithm: 6 bits. Specifies the encryption algorithm used.

pts_adjustment: 33 bits. An offset to be added to pts_time fields.

cw_index: 8 bits. Index of the control word (key) for decryption.

tier: 12 bits. Assigns messages to authorization tiers.

splice_command_length: 12 bits. Length of the splice command in bytes.

splice_command_type: 8 bits. Specifies the command type.

descriptor_loop_length: 16 bits. Length of the descriptor loop in bytes.

alignment_stuffing: Stuffing bytes for encryption alignment.

E_CRC_32: 32 bits. CRC for the encrypted portion of the message.

CRC_32: 32 bits. CRC for the entire section.

Table 6: sap_type values

sap_type valueISOBMFF SAP typeUsage Notes
0x0Type 1Closed GOP with no leading pictures
0x1Type 2Closed GOP with leading pictures
0x2Type 3Open GOP
0x3SAP type not specifiedThe type of SAP, if any, is not signaled

Table 7: splice_command_type values

Commandsplice_command_type valueXML Element
splice_null0x00SpliceNull
Reserved0x01-0x03
splice_schedule0x04SpliceSchedule
splice_insert0x05SpliceInsert
time_signal0x06TimeSignal
bandwidth_reservation0x07BandwidthReservation
Reserved0x08-0xFE
private_command0xFFPrivateCommand

9.7. Splice Commands

9.7.1. splice_null()

Can be used for extensibility or as a heartbeat message.

SyntaxBitsMnemonic
splice_null() {
}

9.7.2. splice_schedule()

Allows a schedule of splice events to be conveyed in advance.

SyntaxBitsMnemonic
splice_schedule() {
  splice_count8uimsbf
  for (i=0; i<splice_count; i++) {
    splice_event_id32uimsbf
    splice_event_cancel_indicator1bslbf
    event_id_compliance_flag1bslbf
    reserved6bslbf
    if (splice_event_cancel_indicator == '0') {
      out_of_network_indicator1bslbf
      program_splice_flag1bslbf
      duration_flag1bslbf
      reserved5bslbf
      if (program_splice_flag == '1') utc_splice_time32uimsbf
      if (program_splice_flag == '0') {
        component_count8uimsbf
        for(j=0; j<component_count; j++) {
          component_tag8uimsbf
          utc_splice_time32uimsbf
        }
      }
      if (duration_flag) break_duration()
      unique_program_id16uimsbf
      avail_num8uimsbf
      avails_expected8uimsbf
    }
  }
}

9.7.3. splice_insert()

Signals an upcoming splice event.

SyntaxBitsMnemonic
splice_insert() {
  splice_event_id32uimsbf
  splice_event_cancel_indicator1bslbf
  reserved7bslbf
  if (splice_event_cancel_indicator == '0') {
    out_of_network_indicator1bslbf
    program_splice_flag1bslbf
    duration_flag1bslbf
    splice_immediate_flag1bslbf
    event_id_compliance_flag1bslbf
    reserved3bslbf
    if((program_splice_flag == '1' && splice_immediate_flag == '0')) splice_time()
    if(program_splice_flag == '0') {
      component_count8uimsbf
      for(i=0; i<component_count; i++) {
        component_tag8uimsbf
        if(splice_immediate_flag == '0') splice_time()
      }
    }
    if(duration_flag == '1') break_duration()
    unique_program_id16uimsbf
    avail_num8uimsbf
    avails_expected8uimsbf
  }
}

10. Splice Descriptors

10.3.3. segmentation_descriptor()

Provides an optional extension to the time_signal() and splice_insert() commands that allows for segmentation messages to be sent in a time/video accurate method.

SyntaxBitsMnemonic
segmentation_descriptor() {
  splice_descriptor_tag8uimsbf
  descriptor_length8uimsbf
  identifier32uimsbf
  segmentation_event_id32uimsbf
  segmentation_event_cancel_indicator1bslbf
  segmentation_event_id_compliance_indicator1bslbf
  reserved6bslbf
  if(segmentation_event_cancel_indicator == '0') {
    program_segmentation_flag1bslbf
    segmentation_duration_flag1bslbf
    delivery_not_restricted_flag1bslbf
    if(delivery_not_restricted_flag == '0') {
      web_delivery_allowed_flag1bslbf
      no_regional_blackout_flag1bslbf
      archive_allowed_flag1bslbf
      device_restrictions2bslbf
    } else {
      reserved5bslbf
    }
    if(program_segmentation_flag == '0') {
      component_count8uimsbf
      for(i=0; i<component_count; i++) {
        component_tag8uimsbf
        reserved7bslbf
        pts_offset33uimsbf
      }
    }
    if(segmentation_duration_flag == '1') segmentation_duration40uimsbf
    segmentation_upid_type8uimsbf
    segmentation_upid_length8uimsbf
    segmentation_upid()
    segmentation_type_id8uimsbf
    segment_num8uimsbf
    segments_expected8uimsbf
    if(segmentation_type_id == 0x34 || 0x36 || 0x38 || 0x3A || 0x44 || 0x46) {
      sub_segment_num8uimsbf
      sub_segments_expected8uimsbf
    }
  }
}

Table 22: segmentation_upid_type values

segmentation_upid_typeDescription
0x00Not Used
0x01User Defined (deprecated)
0x02ISCI (deprecated)
0x03Ad-ID
0x04UMID
0x05ISAN (deprecated)
0x06ISAN (V-ISAN)
0x07TID
0x08TI (AiringID)
0x09ADI
0x0AEIDR
0x0BATSC Content Identifier
0x0CMPU()
0x0DMID()
0x0EADS Information
0x0FURI
0x10UUID
0x11SCR
0x12 - 0xFFReserved

Table 23: segmentation_type_id values

Value (Hex)Segmentation Message
0x00Not Indicated
0x01Content Identification
0x10Program Start
0x11Program End
0x12Program Early Termination
0x13Program Breakaway
0x14Program Resumption
0x17Program Overlap Start
0x20Chapter Start
0x21Chapter End
0x30Provider Advertisement Start
0x31Provider Advertisement End
0x32Distributor Advertisement Start
0x33Distributor Advertisement End
0x34Provider Placement Opportunity Start
0x35Provider Placement Opportunity End
0x36Distributor Placement Opportunity Start
0x37Distributor Placement Opportunity End
0x40Unscheduled Event Start
0x41Unscheduled Event End
0x50Network Start
0x51Network End