Hola.
Continuando con este blog pasamos ahora a la parte de Program Specific Information (PSI)
Pero que es el Program Specific Information (PSI)?, esta parte del transport stream son metadatos que nos ayudan a construir nuestro transport stream por canales es decir cada canal que tenemos en nuestra red esta construido con estos datos para que podamos visualizarlo en nuestra pantalla.
El PSI contiene así 5 tablas que son:
- PAT (program association table)
- CAT (conditional access table)
- PMT (program map table)
- NIT (network information table)
- TDT (time and date table)
PSI siempre se lleva en forma de tabla, esta tabla puede llevar varios transport streams, el PSI nunca debe ser sometido a scrambling ya que el codificador/decodificador deben ser capaces de identificar fácilmente las propiedades del transport stream.
PAT, CAT y TDT están asociadas con PIDs predefinidos. Pueden existir diferentes PMT tablas en un stream a estas se les dan PID definidos por el usuario (que son PES packets). Los PIDs de la tabla PMT están definidos en la PAT y son los únicos PID definidos ahi (PES PIDs son definidos en PMT) cada tabla tiene una estructura definida.
PAT (program association table)
Cuando Existe | Nombre | Numero de bits | Descripcion |
If TS Payload unit start | Pointer field | 8 | Presente is payload_unit_start_indicator bit esta en el TS header. Nos da el número de bytes del fin del campo al inicio de los datos de payload. |
| Table ID | 8 | 0x00 |
| Section syntax indicator | 1 | Siempre 1 para PAT |
| 0 | 1 | Siempre 0 para PAT |
| Reserved | 2 | Siempre en binario '11' |
| Section length | 2+10 | Informa cuantos programas son listados debajo de un especifico numero de bytes de esta sección, iniciando inmediatamente siguiendo este campo he incluyendo el CRC. los primeros 2 bits deben ser cero. |
| transport stream ID | 16 | Datos del usuario. |
| Reserved | 2 | Binario siempre colocado en '11' |
| Version number | 5 | Numero de versión de la tabla. Incrementado por 1 cuando los datos en la tabla cambian, van de 31 a 0. |
| Current/next indicator | 1 | Si es 0, la tabla no es aplicable (se aplica cuando se vuelve 1) |
| Section number | 8 | Índice de esta sección en la secuencia de todas las secciones de la tabla PAT. Primera sección es numero 0 |
| Last section number | 8 | Índice de la ultima sección de la tabla PAT |
|
Repetido N veces dependiendo del tamaño de la sección | Program num | 16 |
|
Reserved | 3 | Siempre como binario '111' |
Program PID | 13 | paquetes con este PID son asumidos como PMT tablas |
| CRC32 | 32 |
|
La PAT tiene asignado el PID 0x0000 y la tabla 0x00. El transport stream contiene al menos 1 o más TS con el PID 0x0000, algunos son consecutivos del PAT, del lado del decodificador el PSI lista el TS entrante. Después el filtro identifica la PAT se ensamblan el paquete y se decodifica. La PAT tiene la información de todos los programas contenidos en el TS. La PAT contiene información que muestra la asociación de la PMT PID y el Program Number. La PAT debe terminar con un CRC de 32 Bits
CAT (conditional access table)
La tabla se utiliza para acceso condicional a los streams. Esta tabla provee asociación con los streams del EMM. Cuando el transport stream esta scrambled entonces esta sección contiene el EMM PID. El valor de este PID es 0x01.
PMT (program map table)
Partial PMT format |
Cuando existe | Nombre | Numero of bits | Descripción |
Si TS payload unit inicia | Pointer field | 8 | Generalmente 0X00 for PMT |
| Table ID | 8 | Siempre 0x02 para PMT |
| Section syntax indicator | 1 |
|
| Always set to 0 | 1 |
|
| Reserved | 2 | Siempre en binario '11' |
| Section length | 2+10 | Numero de programas listados abajo. Los primeros 2 bits siempre cero. |
| Program num | 16 |
|
| Reserved | 2 |
|
| Version number | 5 | Incrementado por 1 en mod 32 cada vez que la tabla cambia |
| Current Next indicator | 1 | Si es 1, la tabla es válida, si es 0 será valido la próxima vez. |
| Section number | 8 | Siempre 0x00 |
| Last section number | 8 | Siempre 0x00 |
| Reserved | 3 |
|
| PCR PID | 13 | PID del stream para el tiempo o 0x1FFF |
| Reserved | 4 |
|
| Program info length | 2+10 | Suma del tamaño del siguiente descriptor del programa. Los primeros 2 cero. |
| Program descriptor | N*8 |
|
|
Repetido N veces dependiendo del tamaño de la seccion | stream type | 8 |
|
Reserved | 3 | Siempre en binario '111' |
Elementary PID | 13 |
|
Reserved | 4 |
|
ES Info length | 2+10 | Primeros 2 bits deben ser cero. El valor debe ser cero |
ES Descriptor | N*8 | Si ES es cero se omite. |
|
| CRC32 | 32 |
|
Esta tabla contiene los números de PID de los elemtary streams asociados con el programa y contiene la información hacerca del tipo de elementary stream utilizado (video, audio, etc). También contiene el numero de titulo ECM PID del mensaje de control que está asociado con el programa.
NIT (network information table)
Esta tabla provee de la información acerca de los multiplexores y los transport streams en una red.
La información a cerca de la red actual usa el table_id 0x40, y a cerca de otras redes utiliza el table_id 0x41
Este segmento de la red es llevado en el PID 0x0010,
Además también contiene streams de información privados correspondientes a la red como subtítulos o tele texto
TDT (time and date table) / TOT (time-offset table)
El TDT nos ofrece el UTC (Universal Time) en formato MJD (modified Julian date). El TOT nos ofrece el tiempo local en UTC. Esto se utiliza para definir el tiempo local. El valor de esto en ambas tablas es 0x0014
Para TDT – Table ID es 0x70. Para TOT – Table ID es 0x73.