# MPEG program stream

MPEG-2 Program Stream (PS o MPEG-PS) es un formato contenedor para multiplexación orientado a paquetes de uno o varios flujos de PES (Packetized Elementary Stream) creados a partir de uno o varios ES (Elementary Stream) que comparten y fueron codificados por el mismo reloj de referencia, STC (System Time Clock). Puede albergar flujos de video, audio y datos auxiliares, además integra información de reloj para la correcta decodificación y sincronización del resto de flujos, esto asegura una presentación simultánea. Comúnmente, agrupa un flujo de video y varios de audio y datos.
Su tasa de bits puede ser fija o variable. En cada caso, los ES que lo constituyen también pueden ser de tasa fija o variable. La tasa de bits de un PS principalmente viene definida por los valores y localización del SCR (System Clock Reference). Los paquetes de un PS pueden ser de longitud variable y son relativamente grandes (2048bytes/paquete PS).
Este formato contenedor de flujos de bits diseñado por MPEG, se encuentra definido formalmente en MPEG-2/System y estandarizado por ISO/IEC 13818-1 y ITU-T Rec. H.222.0. Su diseño está orientado hacia el almacenamiento de un único programa codificado (servicio audiovisual) u otros datos como para la comunicación sobre un canal de datos en entornos casi libres de errores (QEF: Quasi-Error Free) en los que la tasa de BER es menor a 10exp-10, mayores tasas provocan defectos notorios. Principalmente es esta la diferencia con el formato MPEG-2 Transport Stream, diseñado para canales en los que una mayor tasa de error es probable. El formato PS también es adecuado para aplicaciones que puedan implicar procesado software como aplicaciones interactivas multimedia. Además se utiliza en los estándares de Televisión Digital de DVB.

## Historia

La estructura tipo PS se especifica por primera vez en 1993 en MPEG-1 Part1: Systems estandarizado en ISO/IEC 11172-1. Más tarde en 1996 fue acuñado el término Program Stream en MPEG-2 Part1: Systems estandarizado en ISO/IEC 13818-1. MPEG-2 Program Stream es análogo y similar a la capa de Sistemas de MPEG-1.

## Estructura de trama

La estructura de trama de PS se compone de varios PES que se estructuran en nuevos paquetes (pack) de nivel superior.
Un paquete se compone de:
* Cabecera de paquete (pack header): Esta contiene una palabra identificativa del inicio de cabecera, la tasa de multiplexación y una referencia del reloj de sistema (SCR), que se especifican como números binarios de 42bits que se expresan en unidades de 27MHz. También contiene información acerca de los paquetes de relleno (stuffing packets) aunque no suelen utilizarse.
* Cabecera de sistema (system header): Es una cabecera opcional. Proporciona información general sobre el número y tipo de secuencias PES (audio, video y datos) que componen el paquete, además de datos como la velocidad binaria máxima o información complementaria para la correcta decodificación.
* Paquetes PES: (PES packet): Número indeterminado de paquetes PES tomados de los ES que componen el Servicio Audiovisual, en cualquier orden.
* Fin de paquete (End Code): La finalización del paquete se indica con un código específico.
No existe especificación alguna acerca de la longitud que debe tener un paquete, únicamente se indica que al menos debe aparecer un “pack-header” cada 0.7s para un correcto sincronismo.

## Formatos compatibles

MPEG-2 Program Stream puede contener en su formato diferentes tipos de video y audio comprimidos. Algunos de ellos se muestran a continuación:
* Video: MPEG-1Part2, MPEG-2 Part2 y MPEG-4 Part2 and Part10 (ITU-T H.264), no estandarizado internacionalmente VC-1.
* Audio: MPEG-1 Part3 (MP3, MP2 y MP1), MPEG-2Part3 and Part7 (Advanced Audio Coding) y MPEG-4 Part3 (Advanced Audio Coding), no estandarizado internacionalmente Dolby Digital AC-3.
ISO autorizó a SMPTE Registration Authority, LLC, como la autoridad de registro para los identificadores de formatos MPEG-2, cuando estos formatos no son necesariamente estandarizados internacionalmente.