# Protocol de flux de dades en temps real

El protocol de flux de dades en temps real o RTSP (de l'anglès Real Time Streaming Protocol) estableix i controla un o diversos fluxos de dades sincronitzats, ja siguin d'àudio o de vídeo. El RTSP actua com un comandament a distància mitjançant la xarxa per a servidors multimèdia.

## Descripció

El RTSP és un protocol no orientat a connexió, en lloc d'això el servidor manté una sessió associada a un identificador, en la majoria dels casos RTSP fa servir TCP per dades de control del reproductor i UDP per les dades d'àudio i vídeo encara que també pot fer servir TCP en cas que sigui necessari. En el transcurs d'una sessió RTSP, un client pot obrir i tancar diverses connexions de transport cap al servidor per tal de satisfer les necessitats del protocol.
De forma intencionada el protocol és similar en sintaxi i operació al HTTP de forma que els mecanismes d'expansió afegits al HTTP poden en molts casos afegir-se al RTSP, en qualsevol cas RTSP difereix en un nombre significatiu d'aspectes del HTTP:
* RTSP introdueix nous mètodes i té un identificador de protocol diferent.
* Un servidor RTSP necessita mantenir l'estat de la connexió al contrari del HTTP
* Tant el servidor com el client poden llençar peticions.
* Les dades són transportades per un protocol diferent
El protocol suporta les següents operacions:
Recuperar continguts multimèdia del servidor: El client pot sol·licitar la descripció d'una presentació per HTTP o qualsevol altre mètode. Si la presentació és multicast, la descripció conté els ports i les adreces que seran fets servir. Si la presentació és unicast el client és el que proporciona el destí per motius de seguretat.
Invitació d'un servidor multimèdia a una conferència: Un servidor pot ser invitat a unir-se a una conferència existent en lloc de reproduir la presentació o gravar tot o una part del contingut. Aquest mode és útil per aplicacions d'ensenyament distribuït on diferents parts de la conferència van prenent part en la discussió.
Addició multimèdia a una presentació existent: Particularment per presentacions en viu, útil si el servidor pot avisar el client sobre els nous continguts disponibles.

## Propietats

RTSP té les següents propietats:
* Extensible: nous métodes i paràmetres poden ser fàcilment afegits al RTSP
* Segur: RTSP reutilitza mecanismes de seguretat web ja sigui als protocols de transport (TLS) o dins del mateix protocol. Totes les formes d'autentificació HTTP ja sigui bàsica o basada en resum són directament aplicables.
* Independent del protocol de transport: RTSP pot fer servir indistintament protocols de datagrama no fiables (UDP) o datagrames fiables (RDP, no gaire estès) o un protocol fiable orientat a connexió com el TCP.
* Capacitat multi-servidor: Cada fluxe multimedia dins d'una presentació pot residir en servidors diferents, el client automàticament estableix diverses sessions concurrents de control amb els diferents servidors, la sincronització la duu a terme el nivell de transport.
* Control de dispositius de gravació: El protocol pot controlar dispositius de gravació i reproducció.
* Adequat per a aplicacions professionals: RTSP suporta resolució a nivell de frame mitjançant marques temporals SMPTE per permetre edició digital.

## Peticions RTSP

Les peticions RTSP estan basades en peticions HTTP i generalment són enviades del client al servidor, les més tipiques són:

### DESCRIBE

Aquest mètode obté una descripció d'una presentació o de l'objecte multimèdia apuntat per un URL RTSP situat en un servidor. El servidor respon a aquesta petició amb una descripció del recurs sol·licitat, entre altres dades la descripció conté una llista dels fluxos multimèdia que seran necessaris per la reproducció. Aquesta sol·licitud/resposta constitueix la fase d'inicialització del RTSP.
Exemple:
Client→Servidor:
Servidor→Client:

### SETUP

Especifica com serà transportat el flux de dades, la petició conté l'URL del flux multimèdia i una especificació de transport, aquesta especificació típicament inclou un port per rebre les dades (àudio o vídeo), i un altre per les dades RTCP (meta-informació).
El servidor respon confirmant els paràmetres escollits i omple les parts restants, com els ports escollits pel servidor. Cada flux de dades ha de ser configurat amb SETUP abans d'enviar una petició de PLAY.
Exemple:
Client→Servidor:
Servidor→Client:

### PLAY

Una petició de PLAY provocarà que el servidor comenci a enviar dades dels fluxes especificats fent servir els ports configurats amb SETUP.
Exemple:
Client→Servidor:

### PAUSE

Atura temporalment un o tots els fluxos, de manera que puguin ser tornats a recuperar amb un PLAY posteriorment.
Exemple:
Client→Servidor:
Servidor→Client:

### TEARDOWN

Atura l'entrega de dades per l'URL indicat alliberant els recursos associats.
Exemple:
Client→Servidor:
Servidor→Client:

## Sessió RTSP

* El client accedeix a l'URL RTSP per tal d'obtenir el nom del servidor i el port.
* Si el nom del servidor no està en format IP, el client fa una consulta DNS per obtenir l'adreça corresponent.
* El client inicia una connexió TCP cap al servidor.
* Quan la connexió ha estat correctament establerta, el client envia al servidor una petició OPTIONS. EL servidor retorna informació que pot incloure la versió de RTSP, la data, el número de sessió, el nom del servidor i els mètodes suportats.
* El client envia una petició DESCRIBE per obtenir una descripció de la presentació. El servidor respon amb tots els valors d'inicialització necessaris per a la presentació.
* El client envia SETUP per cada flux de dades que cal reproduir. El SETUP especifica els protocols acceptats pel transport de les dades.
* El client inicialitza els programes adequats requerits per reproduir la presentació.
* El client envia una petició PLAY que informa al servidor que ara és el moment de començar a enviar dades.
* Durant la sessió, el client periòdicament fa ping al servidor fent servir peticions SET_PARAMETER. Encara que la resposta sigui errònia el client la ignora tot informant al client que el servidor encara és actiu.
* Quan la presentació termina o l'usuari la para, el client envia un SET_PARAMETER que conté les estadístiques de la sessió.
* El client envia TEARDOWN per donar per terminada la connexió amb el servidor.

## Exemple

A continuació un exemple de la utilització d'una sessió RTSP simple que controla múltiples streams.
Es tracta d'un client C que sol·licita una presentació a un servidor M. El vídeo s'emmagatzema en un contenidor d'arxius. El client ha obtingut un URL RTSP del contenidor d'arxius.

## Enllaços externs

* IETF - Real Time Streaming Protocol
* Demostració d'una càmera enviu utilitzant RTSP (user: demo pass:demo) Arxivat 2008-07-16 a Wayback Machine.
* Càmera IP utilitzant RTSP Arxivat 2008-03-02 a Wayback Machine.