# MPEG-2 Transport Stream

MPEG-2 Transport Stream (també anomenat MPEG-2 TS, MPEG TS o simplement TS), és un protocol de comunicació per a la transmissió d'àudio, vídeo i dades en medis susceptibles al soroll, i que es troba especificat dins la part 1 de MPEG-2 (ISO/IEC13818-1). L'esmentat protocol permet multiplexar diferents tipus de continguts, els quals no necessàriament han de pertànyer a una mateixa font, i demultiplexar-los en recepció mantenint-ne la sincronia. És usat en l'estàndard DVB així com en l'ATSC, els quals són sistemes de Televisió Digital.
Aquest protocol contrasta amb un altre estàndard MPEG, com és el MPEG-2 Program Stream, el qual no té en compte la protecció contra errors que el Transport Stream ofereix i que per tant queda relegat a usos en aplicacions lliures d'errors, com és el cas del DVD.

## Creació del Transport Stream

    Abans de generar els paquests o trames del Transport Stream, ens hem d'assegurar que les dades amb les quals treballem siguin i estiguin estructurades d'una manera adequada.

### Tractament inicial del contingut

El primer que tal tenir en compte és quin tipus de dades ens arriben a l'hora de crear una trama. Habitualment, en aquest sistema es treballarà amb àudio i vídeo comprimits en MPEG, tot i que també pot incloure altres tipus de dades. A la sortida del compressor s'obté el que s'anomena Elementary Stream (ES), que és un corrent de bits que correspon a un únic tipus de dades. El primer pas a l'hora de preparar aquests ES per formar part de la Transport Stream és convertir l'Elementary Stream a Packetized Elementary Stream (PES), cosa que consisteix únicament a agafar les dades de l'elementary stream i precedir-les d'una capçalera cada cert nombre de bits, el nombre el qual és variable i dependrà del dissenyador del sistema. En cap cas però, la mida del paquet, incloent-hi la capçalera, no sobrepassarà els 64 KBytes.
Dins la capçalera d'un PES, hi podem trobar diversos camps, com ara identificadors de l'stream, camps per informar de la mida del PES i de la mida de les dades del PES, i dos flags que anuncien la presència de certa informació addicional. Concretament, el flag 2, ens avisa de la presència de dos camps anomenats Decoding Time Stamps i Presentation Time Stamps (DTS i PTS respectivament), els quals són el mecanisme que utilitza MPEG pel control del temps a l'hora de la decodificació de l'stream, i de la seva presentació en pantalla, ja que, cal recordar que en corrents de vídeo habitualment és necessari decodificar imatges futures per poder fer el pertinent amb les actuals.

### Generació dels paquets de transport

A l'hora de generar els paquets de transport, s'han de tenir en compte un parell de condicions:
* La longitud del paquet de transport és fixa, de 188 bytes.
* A cada paquet de transport només s'hi poden introduir dades d'un sol PES.
* El primer que enviem són bits de payload i no pas de capçalera, que de fet seran els darrers.
A l'hora de generar els paquets de transport, cal tenir en compte que haurem d'esmicolar els PES en diverses parts habitualment, ja que aquests poden tenir fins a 64 KB mentre que la longitud del Transport Packet no pot superar els 188 bytes. Això no ha de representar cap problema excepte en l'últim trencament, ja que les dades podrien no coincidir amb l'espai de payload del Transport Packet. Per solucionar aquest inconvenient és pel que tenim l'Adaptation Field, el qual omple aquells buits que deixarien unes dades petites en el camp de Payload.

## Estructura del Transport Stream
### Estructura del Transport Packet

L'estructura bàsica d'un paquet de transport consta doncs d'un payload o càrrega útil, d'un adaptation field, i d'una capçalera.
El payload és aquell camp que conté les dades útils que provenen del PES packet. L'adaptation field, com ja hem vist, ajusta les mides d'entrada dels PES per a donar una mida constant a la sortida de 188 bytes. A més, aquest camp s'encarrega també de contenir el rellotge de sistema (PCR, Program Clock reference) el qual és particular de l'ES i que ha d'aparèixer cada 0,1 segons com a mínim.
Per la seva banda, la capçalera duu molta informació essencial sobre el que transporta. En concret, és important l'existència d'un camp de la capçalera anomenat PID i que és el que identifica el contingut del paquet. Tots aquells paquets que corresponguin a un mateix ES, durant en la capçalera el mateix PID. Aquest PID, o Packet Identifier, és de gran importància com veurem ens l'apartat de la PSI.

## Informació Específica de Programa (PSI)

Com que el corrent de Transport, consta d'una sèrie de fluxos que corresponen a programes independents, però que contenen diferents tipus de streams que van conjuntament (típicament àudio i vídeo), i tenint en compte que cada flux consta d'un identificador (PID), és necessari que hi hagi una relació de PIDS en algun lloc, on es relacioni aquest conjunt de streams.

### PAT

La Program Association Table (PAT), és la més bàsica de les taules contingudes en el Transport Stream. Conté dins seu una relació dels programes que es transporten en el TS, junt amb el PID de la PMT que correspon a cada programa. Recordem que quan diem programa ens referim a conjunt d'àudio i vídeo, com a mínim. (Un canal de televisió per exemple, és un programa). Aquesta taula és la primera que buscarà el decodificador en tots els casos, que serveix per identificar els continguts del TS i saber on els ha de buscar. Sempre té el PID 0x00h.

### PMT

Dins la Progam Map Table, el PID de la qual ve indicat dins la PAT, trobem una relació dels diferents PIDs dels Streams del programa indicat. És a dir, si el programa en qüestió consta d'un flux de vídeo amb dos àudios i uns subtítols, trobarem una relació de 4 PIDs, 1 per vídeo, 2 per àudio i 1 de dades. Aquests PIDs seran ja els dels Paquets de Transport que contenen els Streams desitjats.
A un nivell no tan bàsic, això no és correcte del tot, ja que la PMT porta també altres camps, com són el PID del flux de dades que porta el PCR del programa (així que de fet hi haurà un PID que apareixerà dues vegades en la PMT, com a PCR i com a flux de dades).

### CAT

La Conditional Acces Table, ja de menys importància, és una taula que només apareix si hi ha algun programa d'acces condicional dins del múltiplex. En aquest cas, la taula conté el PID del programa d'accés condicional i garanteix al desencriptador informació sobre l'encriptació usada. Aquestes taules es transporten amb PID 0x01 i en l'standard MPEG no se n'especifica l'estructura, ja que dependrà del sistema d'encriptació usat.

### NIT

Les Network Information Table, de contingut privat i no especificades per MPEG, contenen teòricament, informació sobre transmissió, modulació i d'altres característiques del broadcasting.

## Bibliografia

* Especificació de l'estàndard 13818-1 de la ISO/IEC Arxivat 2010-06-11 a Wayback Machine.(anglès)
* Indicacions de recepció i tractament de Transport Streams de DVB segons la BBC (anglès)
* Explicació detallada del sistema de Transport Stream de MPEG-2 per la BBC(anglès)
* Apunts de la Universitat Politècnica de Madrid sobre MPEG-2 Arxivat 2010-09-30 a Wayback Machine. (castellà)
* Apunts del University College London sobre vídeo (anglès)

## Vegeu també

* AVCHD
* VOB (utilitzat en DVD)
* .m2ts

## Enllaços externs

* Manual de televisió digital a la Universitat Ramon Llull - La Salle (català)