2.4.4     Program specific information

Program Specific Information (PSI) includes both ITU-T Rec. H.222.0 | ISO/IEC 13818-1 normative data and private data that enable de-multiplexing of programs by decoders. Programs are composed of one or more elementary streams, each labeled with a PID. Programs, elementary streams or parts thereof may be scrambled for conditional access. However, Program Specific Information shall not be scrambled.

 

In Transport Streams, Program Specific Information is classified into four table structures as shown in the table below. While these structures may be thought of as simple tables, they shall be segmented into sections and inserted in Transport Stream packets.

 

Table 2-24 -- Program specific information

Structure Name

Stream Type

Reserved PID #

Description

Program Association Table

ITU-T Rec. H.222.0 | ISO/IEC 13818-1

0x00

Associates Program Number and  Program Map Table PID

Program Map Table

ITU-T Rec. H.222.0 | ISO/IEC 13818-1

Assigned in thePAT

Specifies PID values for components of one or more programs

Network Information Table

Private

Assigned in the PAT

Physical network parameters such as FDM frequencies, Transponder Numbers, etc.

Conditional Access Table

ITU-T Rec. H.222.0 | ISO/IEC 13818-1

0x01

Associates one or more (private) EMM streams each with a unique PID value

 



















2.4.4.3 Program association table

 

The Program Association Table provides the correspondence between a program_number and the PID value of the Transport Stream packets which carry the program definition. The program_number is the numeric label associated with a program.

 

The overall table is to be split into one or more sections with the following syntax.

 

Program number 0x0000 is reserved to specify the network PID.  This identifies the Transport Stream packets which carry the Network Information Table.

 

Table 2-26 -- Program association section

Syntax

No. of  bits

Mnemonic

program_association_section() {

 

 

                  table_id

8

uimsbf

                  section_syntax_indicator

1

bslbf

                  '0'

1

bslbf

                  reserved

2

bslbf

                  section_length

12

uimsbf

                  transport_stream_id

16

uimsbf

                  reserved

2

bslbf

                  version_number

5

uimsbf

                  current_next_indicator

1

bslbf

                  section_number

8

uimsbf

                  last_section_number

8

uimsbf

                  for (i=0; i<N;i++) {

 

 

                                   program_number

16

uimsbf

                                   reserved

3

bslbf

                                   if(program_number == '0') {

 

 

                                                     network_PID

13

uimsbf

                                   }

 

 

                                   else {

 

 

                                                     program_map_PID

13

uimsbf

                                   }

 

 

                  }

 

 

                  CRC_32

32

rpchof

}

 

 

 

2.4.4.4 Table_id assignments

 

The table_id field identifies the content of a Transport Stream PSI section as shown in table 2-27 below.

Table 2-27 -- table_id assignment values

value

description

0x00

program_association_section

0x01

conditional_access_section(CA_section)

0x02

TS_program_map_section

0x03-0x3F

ITU-T Rec. H.222.0 | ISO/IEC 13818 reserved

0x40-0xFE

User private

0xFF

forbidden

 

2.4.4.5 Semantic definition of fields in program association section

 

table_id -- This is an 8 bit field, which shall be set to 0x00 as shown in table 2-27 on page 47 above.

 

section_syntax_indicator -- The section_syntax_indicator is a 1 bit field which shall be set to '1'.

 

section_length -- This is a twelve bit field, the first two bits of which shall be '00'. It specifies the number of bytes of the section, starting immediately following the section_length field, and including the CRC. The value in this field shall not exceed 1021

 

transport_stream_id -- This is a 16 bit field which serves as a label to identify this Transport Stream from any other multiplex within a network. Its value is defined by the user.

 

version_number -- This 5 bit field is the version number of the whole Program Association Table. The version number shall be incremented by 1 whenever the definition of the Program Association Table changes. Upon reaching the value 31, it wraps around to 0. When the current_next_indicator is set to '1', then the version_number shall be that of the currently applicable Program Association Table. When the current_next_indicator is set to '0', then the version_number shall be that of the next applicable Program Association Table.

 

current_next_indicator -- A 1 bit indicator, which when set to '1' indicates that the Program Association Table sent is currently applicable. When the bit is set to '0', it indicates that the table sent is not yet applicable and shall be the next table to become valid.

 

section_number -- This 8 bit field gives the number of this section. The section_number of the first section in the Program Association Table shall be 0x00. It shall be incremented by 1 with each additional section in the Program Association Table.

 

last_section_number -- This 8 bit field specifies the number of the last section (that is, the section with the highest section_number) of the complete Program Association Table.

 

program_number -- Program_number is a 16 bit field. It specifies the program to which the program_map_PID is applicable. If this is set to 0x0000 then the following PID reference shall be the network PID. For all other cases the value of this field is user defined. This field shall not take any single value more than once within one version of the program association table.  The program_number may be used as a designation for a broadcast channel, for example.

 

network_PID -- network_PID is a 13 bit field specifying the PID of the Transport Stream packets which shall contain the Network Information Table. The value of the network_PID field is defined by the user, but shall only take values as specified in table 2-4 on page 23. The presence of the network_PID is optional.

 

program_map_PID -- program_map_PID is a 13 bit field specifying the PID of the Transport Stream packets which shall contain the program_map_section applicable for the program as specified by the program_number. No program_number shall have more than one program_map_PID assignment. The value of the program_map_PID is defined by the user, but shall only take values as specified in table  2-4 on page 23.

 

CRC_32 -- This is a 32 bit field that contains the CRC value that gives a zero output of the registers in the decoder defined in Annex B after processing the entire program association section.

 

2.4.4.6 Conditional access table

 

The Conditional Access (CA) Table provides the association between one or more CA systems, their EMM streams and any special parameters associated with them. Refer to 2.6.16 on page 74 for a definition of the descriptor() field below.

 

The table may be segmented into one or more sections, before insertion into Transport Stream packets, with the following syntax.

 

Table 2-28 -- Conditional access section

Syntax

No. of  bits

Mnemonic

CA_section() {

 

 

                  table_id

8

uimsbf

                  section_syntax_indicator

1

bslbf

                  '0'

1

bslbf

                  reserved

2

bslbf

                  section_length

12

uimsbf

                  reserved

18

bslbf

                  version_number

5

uimsbf

                  current_next_indicator

1

bslbf

                  section_number

8

uimsbf

                  last_section_number

8

uimsbf

                  for (i=0; i<N;i++) {

 

 

                                   descriptor()

 

 

                  }

 

 

                  CRC_32

32

rpchof

}

 

 

 






























2.4.4.7 Semantic definition of fields in conditional access section

 

table_id -- This is an 8 bit field, which shall be always set to 0x01 as shown in table 2-27 on page 47 above.

 

section_syntax_indicator -- The section_syntax_indicator is a 1 bit field which shall be set to '1'.

 

section_length -- This is a 12 bit field, the first two bits of which shall be '00'. It specifies the number of bytes of the section starting immediately following the section_length field, and including the CRC. The value in this field shall not exceed 1021.

 

version_number -- This 5 bit field is the version number of the whole conditional access table. The version number shall be incremented by 1 modulo 32 when a change in the information carried within the CA table occurs. When the current_next_indicator is set to '1', then the version_number shall be that of the currently applicable Conditional Access Table. When the current_next_indicator is set to '0', then the version_number shall be that of the next applicable Conditional Access Table.

 

current_next_indicator -- A 1 bit indicator, which when set to '1' indicates that the Conditional Access Table sent is currently applicable. When the bit is set to '0', it indicates that the Conditional Access Table sent is not yet applicable and shall be the next Conditional Access Table to become valid.

 

section_number -- This 8 bit field gives the number of this section. The section_number of the first section in the Conditional Access Table shall be 0x00. It shall be incremented by 1 modulo 256 with each additional section in the Conditional Access Table.

 

last_section_number -- This 8 bit field specifies the number of the last section (that is, the section with the highest section_number) of the Conditional Access Table.

 

CRC_32 -- This is a 32 bit field that contains the CRC value that gives a zero output of the registers in the decoder defined in Annex B after processing the entire conditional access section.

 

2.4.4.8 Program Map Table

 

The Program Map Table provides the mappings between program numbers and the program elements that comprise them.  A single instance of such a mapping is referred to as a "program definition." The program map table is the complete collection of all program definitions for a Transport Stream. This table shall be transmitted in packets, the PID values of which are selected by the encoder. More than one PID value may be used, if desired. The table may be segmented into one or more sections, before insertion into Transport Stream packets, with the following syntax. In each section the section number field shall be set to zero. Sections are identified by the program_number field.

 

Definition for the descriptor() fields may be found in 2.6. on page 67 of this Recommendation | International Standard.

 

Table 2-29 -- Transport Stream program map section

Syntax

No. of bits

Mnemonic

TS_program_map_section() {

 

 

                  table_id

8

uimsbf

                  section_syntax_indicator

1

bslbf

                  '0'

1

bslbf

                  reserved

2

bslbf

                  section_length

12

uimsbf

                  program_number

16

uimsbf

                  reserved

2

bslbf

                  version_number

5

uimsbf

                  current_next_indicator

1

bslbf

                  section_number

8

uimsbf

                  last_section_number

8

uimsbf

                  reserved

3

bslbf

                  PCR_PID

13

uimsbf

                  reserved

4

bslbf

                  program_info_length

12

uimsbf

                  for (i=0; i<N; i++) {

 

 

                                   descriptor()

 

 

                  }

 

 

                  for (i=0;i<N1;i++) {

 

 

                                   stream_type

8

uimsbf

                                   reserved

3

bslbf

                                   elementary_PID

13

uimsnf

                                   reserved

4

bslbf

                                   ES_info_length

12

uimsbf

                                   for (i=0; i<N2; i++) {

 

 

                                                     descriptor()

 

 

                                   }

 

 

                  }

 

 

                  CRC_32

32

rpchof

}

 

 

 














































2.4.4.9 Semantic definition of fields in Transport Stream program map section

 

table_id -- This is an 8 bit field, which in the case of a TS_program_map_section shall be always set to 0x02 as shown in table 2-27 on page 47 above.

 

section_syntax_indicator -- The section_syntax_indicator is a 1 bit field which shall be set to '1'.

 

section_length -- This is a 12 bit field, the first two bits of which shall be '00'. It specifies the number of bytes of the section starting immediately following the section_length field, and including the CRC. The value in this field shall not exceed 1021.

 

program_number -- program_number is a 16 bit field. It specifies the program to which the program_map_PID is applicable. One program definition shall be carried within only one TS_program_map_section. This implies that a program definition is never longer than 1016 bytes. See Informative Annex C for ways to deal with the cases when that length is not sufficient. The program_number may be used as a designation for a broadcast channel, for example. By describing the different program elements belonging to a program, data from different sources (e.g. sequential events) can be concatenated together to form a continuous set of streams using a program_number. For examples of applications refer to Annex C.

 

version_number -- This 5 bit field is the version number of the TS_program_map_section. The version number shall be incremented by 1 modulo 32 when a change in the information carried within the section occurs. Version number refers to the definition of a single program, and therefore to a single section. When the current_next_indicator is set to '1', then the version_number shall be that of the currently applicable TS_program_map_section. When the current_next_indicator is set to '0', then the version_number shall be that of the next applicable TS_program_map_section.

 

current_next_indicator -- A 1 bit field, which when set to '1' indicates that the TS_program_map_section sent is currently applicable. When the bit is set to '0', it indicates that the TS_program_map_section sent is not yet applicable and shall be the next TS_program_map_section to become valid.

 

section_number -- The value of this 8 bit field shall be always 0x00.

 

last_section_number -- The value of this 8 bit field shall be always 0x00.

 

PCR_PID -- This is a 13 bit field indicating the PID of the Transport Stream packets which shall contain the PCR  fields valid for the program specified by program_number. If no PCR is associated with a program definition for private streams then this field shall take the value of 0x1FFF. Refer to the semantic definition of PCR in 2.4.3.5 on page 25 for restrictions on the choice of PCR_PID value.

 

program_info_length -- This is a 12 bit field, the first two bits of which shall be '00'. It specifies the number of bytes of  the descriptors immediately following the program_info_length field.

 

stream_type -- This is an 8 bit field specifying the type of program element carried within the packets with the PID whose value is specified by the elementary_PID. The values of stream_type are specified in table 2-36 on page 64.

 

elementary_PID -- This is a 13 bit field specifying the PID of the Transport Stream packets which carry the associated program element.

 

ES_info_length -- This is a 12 bit field, the first two bits of which shall be '00'. It specifies the number of bytes of the descriptors of the associated program element immediately following the ES_info_length field.

 

CRC_32 -- This is a 32 bit field that contains the CRC value that gives a zero output of the registers in the decoder defined in Annex B after processing the entire Transport Stream program map section.