Dado que existe cierta confusión sobre los conceptos básicos de video, audio, formatos, contenedores,muxers y demás parafernalia vamos a comentar lo más básico por lo menos para entender algo cuando leemos documentos.
Streams, Muxers, Codecs, Contenedores y demas parafernalia
¿Qué es un codec?
Es imprescindible para sobrevivir en esta maraña de conceptos entender la diferencia entre un codec y un contenedor.
Un codec es un algoritmo de compresión que se utiliza para reducir el tamaño de los datos a transmitir (video, audio o lo que sea), llamados streams.
Tenemos codecs para audio como por ejemplo el conocido MP3 o el ogg-vorbis
Tenemos codecs para video como por ejemplo el DivX el MPEG-1,MPEG-2 o MPEG-4.
¿Qué es un contenedor?
Pongamos una analogía para simplificar las cosas. Pensemos en un contenedor como si fuese un paquete postal, la típica caja de embalar, con algo dentro. Cuando recibes la caja piensas:
- ¡mola!, una caja, pero, quiero lo de dentro
No nos importa la caja en si, queremos obtener el contenido, ¿como?, coges un cutter y la abres.
El formato contenedor sigue, básicamente, el mismo principio. Contiene dentro uno o varios streams (recuerda, son los datos de audio o video) comprimidos con un codec. Lo más habitual es que dentro de la caja (el contenedor) haya un stream de audio y otro de video.
Contenedores habituales son, AVI, Ogg, MOV, ASF, MP4.
Los streams que van dentro del contenedor estarán comprimidos con diferents codecs. En un mundo ideal podríamos poner cualquier stream comprimido con cualquier codec en cualquier formato contenedor. Pero, lamentablemente, esto no es así y hay incompatibilidades por lo que no todo contenedor puede llevar cualquier stream.
¿Que es un muxer?
Supongamos que queremos enviar una caja con un video y un audio dentro. Veamos como hacerlo:
- Obtienes un stream de video y un stream de audio
- Codificas cada stream con un codec
- Multiplexas (muxer) ambos streams en un solo fichero
- Metes en la caja de embalar la mezcla
Reproducción del video
Ahora recibimos la caja, la abrimos, separamos los streams (demux) en archivos diferentes, audio, video, subtitulos, etc. Este proceso no transforma ni procesa los streams.
Despues, se utiliza el decoder adecuado para descomprimir cada stream y reproducir el conjunto. Esto lo hará un software concreto, como el windows media player, el VLC, Apple QuickTime, etc.
¿Qué es un Renderizador (Renderer)?
Nos falta un paso que hemos omitido en el proceso. Este paso es el de reproducir el stream en un dispositivo hardware. Esto lo hara un renderizador que suelen implementar los players.
Un Renderizador es similar a un Codec pero la salida final no es otro stream sino una pantalla, una tarjeta de video, etc.
Confusiones con MPEG
MPEG es un tanto especial y origina mucha confusión por lo siguiente:
- MPEG es un codec y hay varias versiones MPEG-1,MPEG-2,MPEG-4,…
- MPEG también es un formato contenedor. A veces se le denomina como sistema MPEG. Hay diferentes tipos: ES,PS y TS.
Al grano, el Streaming
Una vez aclarados conceptos básicos vamos a hablar del streaming propiamente dicho.
El streaming consiste en reproducir streams en tiempo real y recibiéndolos, generalmente, a través de Internet.
Ahora bien, un stream de video suele ser algo pesado(ocupa mucho) para recibirlo entero y reproducirlo, imagina que para ver un video de YouTube esperas a descargarlo entero, tardarías (dependiendo de tu ancho de banda) minutos antes de comenzar a verlo. O supongamos un caso peor, quieres hacer videoconferencia, no es posible recibir el stream completo puesto que se está generando mientras dos personas hablan y se ven, se supone que se va generando y recibiendo en ambos extremos y en tiempo real.
El truco está en no esperar a recibir todo el stream e ir reproduciendo los trocitos que van llegando poco a poco. Como siempre veremos que hay varias formas de conseguir el mismo objetivo, es aquí donde entran en juego los protocolos.
Confusión típica
Hay que tener bien claro lo siguiente, al hacer streaming no se envia el fichero en disco, por ejemplo un fichero .mov. Se envian los streams de audio y video y en el formato en el que estén estos codificados. Recordemos que un contenedor puede alojar streams en diferentes formatos.
Esto se debe tener en cuenta a la hora de transmitir porque no todos los formatos son soportados por todos los reproductores. Al hacer uso de protocolos como RTP los formatos soportados suelen ser limitados.
Los protocolos para el streaming
Tradicionalmente lo que ha interesado en la transmisión de datos es que las dos partes reciban una copia exacta de los datos,¿alguien querría un texto incompleto?. Ahora bien, hablando de vídeo, no resulta tan importante el que se pierda un fotograma como el que el vídeo tenga que dar saltos parándose cada dos por tres porque no han llegado absolutamente todos los datos. Es por este motivo por el que para transmitir vídeo se priorizará el que sea ágil su reproducción antes que esta sea completa (no perdamos fotogramas).
Por estos motivos se han ideado protocolos de transmisión de datos en los que prima la velocidad y estos son los que usaremos para hacer streaming.
HTTP y FTP, y en general todos los que funcionan sobre TCP son protocolos que priman la exactitud de la información y no la velocidad (garantizan que se entregan los datos y además el orden en que se entregan). Por ello, generalmente, se evita usar estos protocolos para hacer streaming. En su lugar se usarán protocolos basados en UDP, que no garantiza la entrega ni el orden de entrega, pero que es más rápido. Apoyándose en este protocolo (UDP) se ha ideado un estándar en Internet para la retransmisión de audio y vídeo, el protocolo RTP.
El protocolo RTP
RTP nos proporcionara entrega de datos en tiempo real independientemente del protocolo subyacente (TCP o UDP), aunque generalmente usaremos UDP.
RTP pude usarse como unicast(uno sirve a otro) o como multicast(uno sirve a muchos). Si lo utilizamos como unicast, copias separadas de los datos son entregadas a cada destinatario. Si usamos multicast los datos se envían desde el servidor solo una vez y la red es responsable de transmitir esos datos a múltiples destinos. El multicast es la forma más eficiente para muchas aplicaciones, como la videoconferencia.
Servicios RTP
RTP te permite identificar el tipo de datos que se está transmitiendo, determinar el orden en que los paquetes debieran ser presentados y sincronizar los streams de diferentes fuentes.
Los paquetes RTP no tienen garantizado el orden de entrega, es más, no está garantizado que lleguen todos. Es tarea del receptor reconstruir la secuencia enviada por el servidor y detectar las pérdidas de datos.
Dado que RTP no proporciona un mecanismo para asegurar la entrega a tiempo u otras garantías de calidad del servicio, se acompaña de un protocolo de control (RTCP) que nos permite monitorizar la calidad de la distribución de datos. RTPC También nos proporciona mecanismos de control e identificación de las transmisiones RTP.
Arquitectura RTP
Una sesión RTP es una asociación entre un grupo de aplicaciones comunicandose con RTP. Una sesión se identifica por una dirección de red y un par de puertos. Un puerto se usa para transmitir los datos y el otro se usa para el control (RTCP).
Un participante es una máquina que, valga la redundancia, participa en la sesión. Participar en la sesión puede consitir, en la simple recepción pasiva de datos(receptor), en transmitir datos de forma activa(servidor), o ambos.
Cada medio (audio, video) se transmite en una sesión diferente. Por ejemplo, si en una conferencia se va a usar audio y video, se usará una sesión para transmitir audio y otra para transmitir video. Esto permite a los participantes elegir que medios quieren reproducir, por ejemplo, uno de los participantes con poco ancho de banda pudiera querer solo recibir el audio.
El protocolo de control RTCP
Cada participante en la sesión recibirá periodicamente paquetes RTCP. Estos paquetes RTCP pueden contener información sobre la calidad del servicio, información sobre la fuente del contenido que se esta transmitiendo y estadísticas sobre los datos que se están transmitiendo.
Tenemos los siguientes tipos de paquetes RTCP:
- Reporte del remitente(Sender Report - SR)
- Reporte del receptor (Receiver Report - RR)
- Descripción de la fuente (Source DEScription - SDES)
- Bye
- Específicos de la aplicación
Los paquetes RTCP son “apilables” de forma que se envía siempre un paquete compuesto que contiene al menos dos de estos paquetes descritos, un report y una descripción de la fuente.
Todos los participantes en la sesión mandan paquetes RTCP. Un participante que ha enviado paquetes de datos mandará un reporte del remitente(SR). El SR contiene el número total de paquetes y bytes enviados así como información que puede utilizarse para sincronizar los streams de diferentes sesiones.
Los participantes en la sesión mandan periodicamente Reportes del receptor (RR) a todas las fuentes de las que están recibiendo datos. Un RR contiene información sobre el número de paquetes perdidos, el número de secuencia más alto recibido y una marca de tiempo que puede utilizarse para estimar el retardo de ida y vuelta entre el emisor y el receptor.
El primer paquete en un paquete compuesto RTCP tiene que ser un paquete de reporte, incluso si no se han enviado o recibido datos, en cuyo caso se envía un RR vacío.
Todos los paquetes compuesto RTCP deben incluir una descripción del origen (Source DEScription) que contiene el nombre canónico (CNAME) que identifica el origen. Se puede añadir información aicional en el SDES como el nombre de la fuente, el email, número de teléfono, localización geográfica, nombre de la aplicación o un mensaje describiendo el estado actual del origen.
Cuando un origen se va a desconectar,manda un paquete BYE. El paquete BYE puede incluir el motivo por el que el participante abandona la sesión.
Los paquetes de aplicación proporcionan un mecanismo para que la aplicación defina y mande información a medida a través de este canal de control.
El protocolo RTSP
El protocolo RTSP (Real Time Streaming Protocol) permite controlar streams multimedia que se distribuyan, por ejemplo, via RTP. El control incluye posicionamiento en el stream, grabación e incluso control del dispositivo.
Un escenario de uso podría ser este:
El cliente accedería a un servidor seb, obtendría un meta-file con indicaciones de como reproducir el video/audio y luego se establecería una conexión RTSP para el control del streaming y una conexión RTP para la distribución del contenido en si.
Veamos un posible intercambio de mensajes entre cliente y servidor. Se puede apreciar en rojo el tipo de mensajes de RTSP como SETUP,PLAY,PAUSE y CLOSE.
Podemos hacer una analogía entre RTSP y el mando del video, el mando simplemente ordena al video que empieze, que pare, que avance, etc. Pero es el video en sí el que reproduce y el canal de transmisión de imágenes no es el del mando.
Formato de contenedor para móviles 3gp
3GP responde a estándar de vídeo de tercera generación.
Es un contenedor multimedia definido por 3GPP para su uso en teléfonos móviles de tercera generación. Es una versión simplificada de MPEG-4 Parte 14 (MP4). Los ficheros 3GP tienen la extensión .3gp o .3g2.
3GP almacena los streams de vídeo como MPEG-4 o H.263 y los streams de audio como AMR-NB o AAC-LC. 3GP describe los tamaños de la imagen y el ancho de banda de forma que los contenidos sean correctamente adaptados a las pantallas de los móviles.
Resoluciones habituales
Cuando hablamos de resoluciones(ancho x alto) las siglas más habituales con las que nos encontraremos (en el mundo de los móviles) son:
- VGA (640×480)
- CIF (352×288)
- QVGA ( 320×240) (Un cuarto de VGA)
- QCIF( 176×144) (Un cuarto de CIF)

