# Protocolo de transmisión en tiempo real

El protocolo de transmisión en tiempo real (del inglés Real Time Streaming Protocol) establece y controla uno o muchos flujos sincronizados de datos, ya sean de audio o de video. El RTSP actúa como un mando a distancia mediante la red para servidores multimedia.

## Descripción

RTSP es un protocolo no orientado a conexión, en lugar de esto el servidor mantiene una sesión asociada a un identificador, en la mayoría de los casos RTSP usa TCP para datos de control del reproductor y UDP para los datos de audio y vídeo aunque también puede usar TCP en caso de que sea necesario. En el transcurso de una sesión RTSP, un cliente puede abrir y cerrar varias conexiones de transporte hacia el servidor con tal de satisfacer las necesidades del protocolo.
De forma intencionada, el protocolo es similar en sintaxis y operación a HTTP de forma que los mecanismos de expansión añadidos a HTTP pueden, en muchos casos, añadirse a RTSP. Sin embargo, RTSP difiere de HTTP en un número significativo de aspectos:
* RTSP introduce nuevos métodos y tiene un identificador de protocolo diferente.
* Un servidor RTSP necesita analizar el estado de la conexión de manera continua, al contrario que HTTP.
* Tanto el servidor como el cliente pueden lanzar peticiones.
* Los datos son transportados por un protocolo diferente.
El protocolo soporta las siguientes operaciones:
Recuperar contenidos multimedia del servidor: El cliente puede solicitar la descripción de una presentación por HTTP o cualquier otro método. Si la presentación es multicast, la descripción contiene los puertos y las direcciones que serán usados. Si la presentación es unicast el cliente es el que proporciona el destino por motivos de seguridad.
Invitación de un servidor multimedia a una conferencia: Un servidor puede ser invitado a unirse a una conferencia existente en lugar de reproducir la presentación o grabar todo o una parte del contenido. Este modo es útil para aplicaciones de enseñanza distribuida dónde diferentes partes de la conferencia van tomando parte en la discusión.
Adición multimedia a una presentación existente: Particularmente para presentaciones en vivo, útil si el servidor puede avisar al cliente sobre los nuevos contenidos disponibles.

## Propiedades

RTSP tiene las siguientes propiedades:
* Extensible: nuevos métodos y parámetros pueden ser fácilmente añadidos al RTSP
* Seguro: RTSP reutiliza mecanismos de seguridad web ya sea a los protocolos de transporte (TLS) o dentro del mismo protocolo. Todas las formas de autentificación HTTP ya sea básica o basada en resumen son directamente aplicables.
* Independiente del protocolo de transporte: RTSP puede usar indistintamente protocolos de datagrama no fiables (UDP) o datagramas fiables (RUDP, no muy extendido) o un protocolo fiable orientado a conexión como el TCP, aunque este último protocolo no es común en la transmisión de datos multimedia, ya que TCP puede provocar demoras y retrasos en el audio/vídeo debido a sistemas de control de errores y pérdidas.
* Capacidad multi-servidor: Cada flujo multimedia dentro de una presentación puede residir en servidores diferentes, el cliente automáticamente establece varias sesiones concurrentes de control con los diferentes servidores, la sincronización la lleva a término la capa de transporte.
* Control de dispositivos de grabación: El protocolo puede controlar dispositivos de grabación y reproducción (p.ej cámaras IP RTSP).
* Adecuado para aplicaciones profesionales: RTSP soporta resolución a nivel de frame mediante marcas temporales SMPTE para permitir edición digital.

## Peticiones RTSP

Las peticiones RTSP están basadas en peticiones HTTP y generalmente son enviadas del cliente al servidor. A continuación se describen la más típicas:

### DESCRIBE

Este método obtiene una descripción de una presentación o del objeto multimedia apuntado por una URL RTSP situada en un servidor. El servidor responde a esta petición con una descripción del recurso solicitado, entre otros datos la descripción contiene una lista de los flujos multimedia que serán necesarios para la reproducción. Esta solicitud/respuesta constituye la fase de inicialización del RTSP.
Ejemplo:
Cliente → Servidor:
Servidor → Cliente:

### SETUP

Especifica cómo será transportado el flujo de datos, la petición contiene la url del flujo multimedia y una especificación de transporte, esta especificación típicamente incluye un puerto para recibir los datos RTP (audio o vídeo), y otro para los datos RTCP (meta-datos).
El servidor responde confirmando los parámetros escogidos y llena las partes restantes, como los puertos escogidos por el servidor. Cada flujo de datos debe ser configurado con SETUP antes de enviar una petición de PLAY.
Servidor → Cliente:

### PLAY

Una petición de PLAY provocará que el servidor comience a enviar datos de los flujos especificados utilizando los puertos configurados con SETUP.
Ejemplo:
Cliente → Servidor:

### PAUSE

Detiene temporalmente uno o todos los flujos, de manera que puedan ser recuperados con un PLAY posteriormente.
Ejemplo:
Cliente → Servidor:
Servidor → Cliente:

### TEARDOWN

Detiene la entrega de datos para la URL indicada liberando los recursos asociados.
Ejemplo:
Cliente → Servidor:
Servidor → Cliente:

## Sesión RTSP

* El cliente accede a la URL RTSP para colocar el nombre del servidor y el puerto.
* Si el nombre del servidor no está en formato IP, el cliente hace una consulta DNS para obtener la dirección correspondiente.
* El cliente inicia una conexión TCP hacia el servidor.
* Cuando la conexión está establecida correctamente, el cliente envía al servidor una petición OPTIONS. EL servidor devuelve información que puede incluir la versión de RTSP, la fecha, el número de sesión, el nombre del servidor y los métodos soportados.
* El cliente envía una petición DESCRIBE para obtener una descripción de la presentación. El servidor responde con todos los valores de inicialización necesarios para la presentación.
* El cliente envía SETUP para cada flujo de datos que se quiere reproducir. El SETUP especifica los protocolos aceptados para el transporte de los datos.
* El cliente inicializa los programas adecuados requeridos para reproducir la presentación.
* El cliente envía una petición PLAY que informa al servidor que ahora es el momento de comenzar a enviar datos.
* Durante la sesión, el cliente periódicamente hace ping al servidor utilizando peticiones SET_PARAMETER. Aunque la respuesta sea errónea el cliente la ignora informando al cliente que el servidor todavía está activo.
* Cuando la presentación termina o el usuario la para, el cliente envía un SET_PARAMETER que contiene las estadísticas de la sesión.
* El cliente envía TEARDOWN para dar por terminada la conexión con el servidor.

## Ejemplo

Lo que se describe abajo es un ejemplo de uso de una sesión RTSP simple para controlar múltiples streams.
El cliente C solicita una presentación a un servidor multimedia M. El video es almacenado en un contenedor de archivos. El cliente ha obtenido un URL RTSP del contenedor de archivos