RTSP fue desarrollado por RealNetworks , Netscape [1] y la Universidad de Columbia . [2] El primer borrador fue enviado a IETF en octubre de 1996 por Netscape y Progressive Networks , después de lo cual Henning Schulzrinne de la Universidad de Columbia presentó "RTSP՚" ("RTSP prime") en diciembre de 1996. [3] [4] Los dos borradores fueron fusionados para su estandarización por el Grupo de Trabajo de Control de Sesiones Multimedia Multipartidistas (MMUSIC WG) del Grupo de Trabajo de Ingeniería de Internet (IETF) y el grupo de trabajo publicó borradores adicionales. [5] [6] El estándar propuesto para RTSP se publicó como RFC 2326 en 1998. [7]
RTSP 2.0 se publicó como RFC 7826 en 2016 como reemplazo de RTSP 1.0. RTSP 2.0 se basa en RTSP 1.0 pero no es compatible con versiones anteriores excepto en el mecanismo de negociación de la versión básica, y sigue siendo un estándar propuesto. [8]
Aunque es similar en algunos aspectos a HTTP , RTSP define secuencias de control útiles para controlar la reproducción multimedia. Mientras que HTTP no tiene estado , RTSP tiene un estado; se utiliza un identificador cuando es necesario para realizar un seguimiento de las sesiones simultáneas. Al igual que HTTP, RTSP utiliza TCP para mantener una conexión de extremo a extremo y, si bien la mayoría de los mensajes de control RTSP son enviados por el cliente al servidor, algunos comandos viajan en la otra dirección (es decir, del servidor al cliente).
Aquí se presentan las solicitudes RTSP básicas. También están disponibles algunas solicitudes HTTP típicas , como la solicitud OPTIONS. El número de puerto de la capa de transporte predeterminado es 554 [7] tanto para TCP como para UDP ; este último se utiliza raramente para las solicitudes de control.
OPCIONES
Una solicitud OPCIONES devuelve los tipos de solicitud que aceptará el servidor.
Una solicitud DESCRIBE incluye una URL RTSP (rtsp://...) y el tipo de datos de respuesta que se pueden manejar. Esta respuesta incluye la descripción de la presentación, normalmente en formato de protocolo de descripción de sesión (SDP). Entre otras cosas, la descripción de la presentación enumera los flujos de medios controlados con la URL agregada. En el caso típico, hay un flujo de medios para cada uno de los flujos de audio y vídeo. Las URL de los flujos de medios se obtienen directamente de los campos de control SDP o se obtienen añadiendo el campo de control SDP a la URL agregada.
C->S: DESCRIBE rtsp://ejemplo.com/media.mp4 RTSP/1.0 Secuencia C: 2S->C: RTSP/1.0 200 OK Secuencia C: 2 Base de contenido: rtsp://example.com/media.mp4 Tipo de contenido: aplicación/sdp Contenido-Longitud: 460 m=vídeo 0 RTP/AVP 96 a=control:id de flujo=0 a=rango:npt=0-7,741000 a=longitud:npt=7.741000 a=rtpmap:96 MP4V-ES/5544 a=mimetype:string;"vídeo/MP4V-ES" a=AvgBitRate:entero;304018 a=StreamName:string;"pista de vídeo sugerida" m=audio 0 RTP/AVP 97 a=control:id_transmisión=1 a=rango:npt=0-7,712000 a=longitud:npt=7.712000 a=rtpmap:97 mpeg4-genérico/32000/2 a=mimetype:string;"audio/mpeg4-generic" a=AvgBitRate:entero;65790 a=StreamName:string;"pista de audio sugerida"
CONFIGURACIÓN
Una solicitud SETUP especifica cómo se debe transportar un único flujo de medios. Esto se debe hacer antes de enviar una solicitud PLAY. La solicitud contiene la URL del flujo de medios y un especificador de transporte. Este especificador normalmente incluye un puerto local para recibir datos RTP (audio o vídeo) y otro para datos RTCP (metainformación). La respuesta del servidor normalmente confirma los parámetros elegidos y completa las partes faltantes, como los puertos elegidos por el servidor. Cada flujo de medios se debe configurar mediante SETUP antes de que se pueda enviar una solicitud de reproducción global.
Una solicitud de REPRODUCCIÓN hará que se reproduzcan una o todas las transmisiones multimedia. Las solicitudes de reproducción se pueden agrupar enviando varias solicitudes de REPRODUCCIÓN. La URL puede ser la URL agregada (para reproducir todas las transmisiones multimedia) o una URL de transmisión multimedia única (para reproducir solo esa transmisión). Se puede especificar un rango. Si no se especifica ningún rango, la transmisión se reproduce desde el principio y hasta el final o, si la transmisión está en pausa, se reanuda en el punto en el que se pausó.
Una solicitud PAUSE detiene temporalmente una o todas las transmisiones multimedia, de modo que luego se puedan reanudar con una solicitud PLAY. La solicitud contiene una URL de transmisión multimedia o agregada. Un parámetro de rango en una solicitud PAUSE especifica cuándo hacer una pausa. Cuando se omite el parámetro de rango, la pausa se produce de inmediato y de manera indefinida.
Este método inicia la grabación de un rango de datos multimedia según la descripción de la presentación. La marca de tiempo refleja la hora de inicio y de finalización (UTC). Si no se proporciona ningún rango de tiempo, utilice la hora de inicio o de finalización proporcionada en la descripción de la presentación. Si la sesión ya ha comenzado, comience a grabar inmediatamente. El servidor decide si almacenar los datos grabados bajo la URI de solicitud u otra URI. Si el servidor no utiliza la URI de solicitud, la respuesta debe ser 201 y contener una entidad que describa los estados de la solicitud y haga referencia al nuevo recurso, y un encabezado de ubicación.
Cuando se envía desde el cliente al servidor, ANNOUNCE publica la descripción de una presentación o un objeto multimedia identificado por la URL de solicitud en un servidor. Cuando se envía desde el servidor al cliente, ANNOUNCE actualiza la descripción de la sesión en tiempo real. Si se agrega una nueva secuencia multimedia a una presentación (por ejemplo, durante una presentación en vivo), se debe volver a enviar toda la descripción de la presentación, en lugar de solo los componentes adicionales, para que se puedan eliminar los componentes.
C->S: ANUNCIAR rtsp://example.com/media.mp4 RTSP/1.0 Secuencia C: 7 Fecha: 23 de enero de 1997 15:35:06 GMT Sesión: 12345678 Tipo de contenido: aplicación/sdp Contenido-Longitud: 332 v=0 o=mhandley 2890844526 2890845468 EN IP4 126.16.64.4 Seminario s=SDP i=A Seminario sobre el protocolo de descripción de sesiones u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps [email protected] (Mark Handley) c=EN IP4 224.2.17.12/127 t=2873397496 2873404696 a=recvonly m=audio 3456 RTP/AVP 0 m=vídeo 2232 RTP/AVP 31S->C: RTSP/1.0 200 OK Secuencia C: 7
DEMOLER
Se utiliza una solicitud TEARDOWN para finalizar la sesión. Detiene todas las transmisiones multimedia y libera todos los datos relacionados con la sesión en el servidor.
La solicitud GET_PARAMETER recupera el valor de un parámetro de una presentación o transmisión especificada en la URI. El contenido de la respuesta y la respuesta se deja en manos de la implementación. Se puede utilizar GET_PARAMETER sin cuerpo de entidad para probar la actividad del cliente o del servidor ("ping").
S->C: OBTENER_PARÁMETRO rtsp://ejemplo.com/media.mp4 RTSP/1.0 Secuencia C: 9 Tipo de contenido: texto/parámetros Sesión: 12345678 Contenido-Longitud: 15 paquetes_recibidos estar nerviosoC->S: RTSP/1.0 200 OK Secuencia C: 9 Contenido-Longitud: 46 Tipo de contenido: texto/parámetros paquetes_recibidos: 10 fluctuación: 0,3838
ESTABLECER_PARÁMETRO
Este método solicita establecer el valor de un parámetro para una presentación o transmisión especificada por la URI.
C->S: ESTABLECER_PARÁMETRO rtsp://ejemplo.com/media.mp4 RTSP/1.0 Secuencia C: 10 Longitud del contenido: 20 Tipo de contenido: texto/parámetros barparam: cosas de barS->C: RTSP/1.0 451 Parámetro no válido Secuencia C: 10 Longitud del contenido: 10 Tipo de contenido: texto/parámetros barraparam
REDIRECCIÓN
Una solicitud REDIRECT informa al cliente que debe conectarse a otra ubicación de servidor. Contiene el encabezado obligatorio Location, que indica que el cliente debe enviar solicitudes para esa URL. Puede contener el parámetro Range, que indica cuándo entra en vigor la redirección. Si el cliente desea continuar enviando o recibiendo contenido multimedia para esta URI, DEBE enviar una solicitud TEARDOWN para la sesión actual y una solicitud SETUP para la nueva sesión en el host designado.
Ciertos diseños de cortafuegos y otras circunstancias pueden obligar a un servidor a intercalar métodos RTSP y datos de flujo. Este intercalado se debe evitar generalmente a menos que sea necesario, ya que complica la operación del cliente y del servidor e impone una sobrecarga adicional. Los datos binarios intercalados SÓLO DEBEN utilizarse si RTSP se transmite por TCP. Los datos de flujo, como los paquetes RTP, se encapsulan mediante un signo de dólar ASCII (24 hexadecimales), seguido de un identificador de canal de un byte, seguido de la longitud de los datos binarios encapsulados como un entero binario de dos bytes en orden de bytes de red. Los datos de flujo siguen inmediatamente después, sin un CRLF, pero incluyendo los encabezados de protocolo de capa superior. Cada bloque $ contiene exactamente una unidad de datos de protocolo de capa superior, por ejemplo, un paquete RTP.
C->S: CONFIGURAR rtsp://ejemplo.com/media.mp4 RTSP/1.0 Secuencia C: 3 Transporte: RTP/AVP/TCP; intercalado=0-1S->C: RTSP/1.0 200 OK Secuencia C: 3 Fecha: 05 de junio de 1997 18:57:18 GMT Transporte: RTP/AVP/TCP; intercalado=0-1 Sesión: 12345678C->S: REPRODUCIR rtsp://ejemplo.com/media.mp4 RTSP/1.0 Secuencia C: 4 Sesión: 12345678S->C: RTSP/1.0 200 OK Secuencia C: 4 Sesión: 12345678 Fecha: 05 de junio de 1997 18:59:15 GMT Información RTP: url=rtsp://example.com/media.mp4;seq=232433;rtptime=972948234S->C: $\000{longitud de 2 bytes}{"longitud" de datos en bytes, con encabezado RTP}S->C: $\000{longitud de 2 bytes}{"longitud" de datos en bytes, con encabezado RTP}S->C: $\001{longitud de 2 bytes}{"longitud" bytes del paquete RTCP}
RTSP sobre HTTP
RTSP sobre HTTP fue definido por Apple en 1999 [9] y [1]. Intercala los datos de video y audio RTP en la conexión de comando RTSP (como se define en RFC2326) y luego envía la conexión de comando RTSP a través de un par de conexiones HTTP, una es una conexión GET de larga duración y la otra es una conexión POST de larga duración.
Este método también se utiliza en el estándar de cámara IP ONVIF y se puede combinar con HTTPS para obtener vídeo y audio seguros y encriptados.
Cifrado RTSP y RTSPS
Existen varios métodos diferentes para cifrar los mensajes de comando RTSP y los datos de video y audio RTP.
RTSP 2.0 (RFC7826) define varios métodos de cifrado e introduce una nueva URL rtsps:// y muchos de ellos se han incorporado a los clientes y servidores RFC2326 RTSP 1.0.
URL de RTSPS (utilizando la URL rtsps://) : este método utiliza un socket TLS (el puerto predeterminado es el 322) para establecer una conexión cifrada entre el cliente RTSP y el servidor RTSP. El video y el audio se pueden enviar de una de dos maneras
Vídeo/audio TCP : el vídeo y el audio RTP se envían intercalados con los comandos RTSP a través de la conexión TLS ya cifrada.
Vídeo/audio UDP y multidifusión UDP : el vídeo y el audio RTP se cifran mediante el protocolo Secure RTP (SRTP) y se envían en paralelo a la conexión TLS RTSPS.
RTSP sobre HTTPS : este método intercala los datos de audio y video RTP en la conexión de comando RTSP (tal como se define en RFC2326) y luego envía la conexión de comando RTSP a través de un par de conexiones HTTPS cifradas. Utiliza el puerto 443 de manera predeterminada.
La IANA ha reservado el prefijo URL rtsps:// y el puerto 322 para RTSPS. [10] A partir de septiembre de 2024, RTSP sobre HTTPS se ha implementado en varias cámaras IP ONVIF y RTSPS (usando la URL rtsps://) ha sido implementado por cámaras CCTV de Axis y Bosch, [11] FFmpeg , GStreamer , MediaMTX [12] y SharpRTSP. [13]
Adaptación de la tasa
El RTSP que utiliza RTP y RTCP permite la implementación de la adaptación de velocidad. [14]
Implementaciones
Servidor
Darwin Streaming Server : versión de código abierto de QuickTime Streaming Server mantenida por Apple.
pvServer : anteriormente llamado PacketVideo Streaming Server, este es el producto de servidor de transmisión de Alcatel-Lucent.
QuickTime Streaming Server : servidor de transmisión de código cerrado de Apple que viene con Mac OS X Server.
VideoLAN : Reproductor multimedia y servidor de transmisión de código abierto.
Servicios de Windows Media : servidor de transmisión de Microsoft que anteriormente se incluía con Windows Server y que utiliza RTSP modificado con extensiones de Windows Media
^ Schulzrinne, Henning ; Rao, Anup; Lanphier, Rob (24 de febrero de 1997). "Protocolo de transmisión en tiempo real (RTSP) (draft-ietf-mmusic-rtsp-01.txt)". Ietf Datatracker . Consultado el 23 de febrero de 2021 .
^ Schulzrinne, Henning ; Rao, Anup; Lanphier, Rob (15 de enero de 1998). "Protocolo de transmisión en tiempo real (RTSP) (draft-ietf-mmusic-rtsp-08.txt)". Ietf Datatracker . Consultado el 23 de febrero de 2021 .
^ ab RFC 2326, Protocolo de transmisión en tiempo real (RTSP) , IETF, 1998
^ Schulzrinne, Henning; Rao, Anup; Lanphier, Rob; Westerlund, Magnus; Stiemerling, Martin (diciembre de 2016). Stiemerling, M (ed.). "Protocolo de transmisión en tiempo real versión 2.0". herramientas.ietf.org . doi : 10.17487/RFC7826 . Consultado el 23 de febrero de 2021 .
^ "Desarrollador - QuickTime - Cartas desde el témpano de hielo". 2013-05-01. Archivado desde el original el 2013-05-01 . Consultado el 2024-09-22 .
^ "Registro de nombre de servicio y número de puerto del protocolo de transporte".
^ Santos, Hugo; Cruz, Rui Santos; Nunes, Mário Serafim (2010), "Técnicas de adaptación de velocidad para WebTV", User Centric Media , Notas de clase del Instituto de Ciencias de la Computación, Informática Social e Ingeniería de Telecomunicaciones, vol. 40, págs. 161–168, doi :10.1007/978-3-642-12630-7_19, ISBN978-3-642-12629-1
^ "YouTube Mobile es un fracaso (Cómo hacer que 3GP/RTSP funcione en WM5)". Chris Duke . 2007-06-23 . Consultado el 29 de mayo de 2021 .
^ cURL — Cambios
^ "Documentación de FFmpeg". El proyecto FFmpeg. 11 de septiembre de 2012. Sección 20.19 . Consultado el 11 de septiembre de 2012 .
Enlaces externos
"Información y actualizaciones del protocolo de transmisión en tiempo real". Archivado desde el original el 6 de marzo de 2007., un repositorio central de información sobre RTSP.
"Tunelización de RTSP y RTP a través de HTTP". Archivado desde el original el 1 de mayo de 2013., Una solución estándar para ayudar a que RTSP funcione a través de firewalls y servidores proxy web
"Agregación de medios administrados mediante Rtsp y Rtp". Guía a un desarrollador a través de la implementación de un RtspClient y un RtspServer que cumplan con los estándares.