Secure Reliable Transport ( SRT ) es un protocolo de transporte de video de código abierto que utiliza el protocolo de transporte UDP .
Descripción general
SRT proporciona conexión y control, transmisión confiable similar a TCP ; sin embargo, lo hace en la capa de aplicación , utilizando el protocolo UDP como capa de transporte subyacente. Admite la recuperación de paquetes mientras mantiene una latencia baja (predeterminado: 120 ms). SRT también admite el cifrado mediante AES .
El protocolo se derivó del proyecto UDT , [1] que fue diseñado para una transmisión rápida de archivos. Proporcionó el mecanismo de confiabilidad utilizando métodos similares para la conexión, números de secuencia, acuses de recibo y retransmisión de paquetes perdidos. Utiliza la retransmisión selectiva e inmediata (basada en NAK).
SRT agregó varias funciones además de eso para admitir el modo de transmisión en vivo:
- Latencia controlada, con transmisión en tiempo de origen (entrega de paquetes basada en marcas de tiempo)
- Control de velocidad del transmisor relajado
- Caída de paquetes condicional "demasiado tarde" (evita el bloqueo del encabezado de línea causado por un paquete perdido que no se recuperó a tiempo)
- Retransmisión ansiosa de paquetes (informe NAK periódico)
Encabezado del paquete
Los paquetes SRT se crean en la capa de aplicación y se entregan a la capa de transporte para su entrega. Cada unidad de datos de control o medios SRT creada por una aplicación comienza con el encabezado del paquete SRT. [2]
Compensaciones | Octeto | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Octeto | Poco [a] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | F | El significado del campo depende del tipo de paquete | ||||||||||||||||||||||||||||||
4 | 32 | El significado del campo depende del tipo de paquete | |||||||||||||||||||||||||||||||
8 | 64 | Marca de tiempo | |||||||||||||||||||||||||||||||
12 | 96 | ID de socket de destino | |||||||||||||||||||||||||||||||
... | ... | Contenido del paquete (depende del tipo de paquete) |
Paquete de datos
Compensaciones | Octeto | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Octeto | Poco [a] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | 0 | Número de secuencia de paquete | ||||||||||||||||||||||||||||||
4 | 32 | PÁGINAS | O | KK | R | Número de mensaje | |||||||||||||||||||||||||||
8 | 64 | Marca de tiempo | |||||||||||||||||||||||||||||||
12 | 96 | ID de socket de destino | |||||||||||||||||||||||||||||||
... | ... | Datos |
Los campos del encabezado son los siguientes:
- Número de secuencia de paquete (31 bits)
- PP (2 bits): indicador de posición del paquete
- O (1 bit): indicador de pedido
- KK (2 bits): indicador de cifrado basado en clave
- R (1 bit): indicador de paquete retransmitido
- Número de mensaje (26 bits)
- Datos (longitud variable)
Paquete de control
Compensaciones | Octeto | 0 | 1 | 2 | 3 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Octeto | Poco [a] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
0 | 0 | 1 | Tipo de control | Subtipo | |||||||||||||||||||||||||||||
4 | 32 | Información específica de tipo | |||||||||||||||||||||||||||||||
8 | 64 | Marca de tiempo | |||||||||||||||||||||||||||||||
12 | 96 | ID de socket de destino | |||||||||||||||||||||||||||||||
... | ... | Campo de información de control (CIF) |
Los campos del encabezado son los siguientes:
- Tipo de control (15 bits): Tipo de paquete de control
- Subtipo (16 bits)
- Información específica de tipo (32 bits)
- Campo de información de control (longitud variable)
Historia
Secure Reliable Transport es un protocolo de transporte de video de código abierto desarrollado originalmente por Haivision. Según SRT Alliance , una organización que promueve la tecnología, optimiza el rendimiento de la transmisión. Esto ayuda a minimizar los efectos de la fluctuación y los cambios de ancho de banda, mientras que los mecanismos de corrección de errores ayudan a minimizar la pérdida de paquetes. SRT admite el cifrado de extremo a extremo con AES. [3] Al realizar retransmisiones, SRT solo intenta retransmitir paquetes durante un período de tiempo limitado en función de la latencia configurada por la aplicación. [4]
Según Marc Cymontkowski, el arquitecto de SRT, además de enviar flujos de transporte MPEG a través de la Internet pública, también se está utilizando para conectividad IoT, intercambio de metadatos, como protocolo de comunicación, así como para la entrega de datos sin comprimir. [5]
La implementación de referencia del protocolo se publicó originalmente bajo la Licencia Pública General Menor versión 2.1, [6] pero se volvió a obtener la licencia bajo la Licencia Pública de Mozilla el 22 de marzo de 2018. [7]
SRT es compatible con los marcos multimedia de software libre GStreamer , FFmpeg , OBS Studio y en el reproductor multimedia de software libre VLC . [4] [8]
El proyecto del Protocolo de transferencia de datos (UDT) basado en UDP ha sido la base del proyecto SRT. [9] La API de SRT C se basa en gran medida en el diseño de la API de UDT [10]
SRT fue diseñado para transmisión de video en vivo de baja latencia. [9] [3]
Haivision lanzó el protocolo SRT y la implementación de referencia como código abierto en el 2017 NAB Show . [9]
En marzo de 2020, se presentó un Borrador de Internet individual, draft-sharabayko-mops-srt, [11] para su consideración al grupo de trabajo de Operaciones de Medios (MOPS) del Grupo de Trabajo de Ingeniería de Internet .
Alianza SRT
SRT Alliance es una organización cuyos miembros desarrollan, utilizan y promueven el protocolo y el software Secure Reliable Transport basado en él. Los miembros fundadores de la alianza son Haivision y Wowza . [12]
Implementaciones
Actualmente hay una implementación disponible, que es la biblioteca SRT de código abierto.
La API de lenguaje C se basa principalmente en la API de UDT anterior, con más cambios a medida que se agregan nuevas funciones. La API es muy similar a la de TCP.
SRT ofrece en realidad tres modos de trabajo, de los cuales los dos primeros se derivaron de UDT:
- Modo de flujo de archivos: como TCP
- Modo de mensaje de archivo: similar al protocolo SCTP : envía bloques de datos con límites claramente definidos
- Modo en vivo: los datos deben enviarse en pequeños paquetes (generalmente hasta 1316 bytes, si el flujo transmitido es MPEG-TS ) con intervalos de tiempo ya apropiados entre ellos. Los mismos paquetes individuales con los mismos intervalos de tiempo entre ellos se entregan luego en el lado del receptor.
La biblioteca SRT también ofrece estas características:
- Cifrado mediante una clave previamente compartida. El soporte de cifrado fue proporcionado originalmente por OpenSSL, ahora también, alternativamente, se puede utilizar Nettle (GNU TLS) o mbedTLS.
- Las aplicaciones pueden usar SRT Access Control (también conocido como "StreamID") para identificar recursos y usar el método de acceso con contraseña de usuario mientras se usa el mismo número de puerto de servicio para múltiples propósitos. [13]
- El mecanismo opcional de corrección de errores hacia adelante .
Se puede encontrar documentación adicional y más detallada en la documentación del código fuente .
Ver también
- Transporte de flujo de Internet confiable , concebido como un sucesor más confiable del transporte confiable y seguro
Notas
- ^ a b c Los bits se ordenan del más significativo al menos significativo; el desplazamiento de bit 0 es el bit más significativo del primer octeto. Los octetos se transmiten en orden de red . El orden de transmisión de bits depende del medio.
Referencias
- ^ "UDT: Rompiendo el cuello de botella de la transferencia de datos" . udt.sourceforge.io . Consultado el 27 de agosto de 2020 .
- ^ "draft-sharabayko-mops-srt-00 - El protocolo SRT" . datatracker.ietf.org . Consultado el 27 de agosto de 2020 .
- ^ a b Haivision. "Transporte seguro y confiable" . GitHub.
- ^ a b Olivier Crête (16 de febrero de 2018). "SRT en GStreamer" .
- ^ "Pega todo junto: una entrevista con Marc Cymontkowski, evangelista de SRT" . Blog de Medialooks . El 5 de noviembre de 2019.
- ^ Michael Larabel (24 de abril de 2017). "Protocolo de transporte de video SRT de código abierto" . Phoronix.
- ^ Roman rndi (22 de marzo de 2018). "Cambiar licencia a MPLv2.0 · Haivision / srt @ a75d4c4" . GitHub.
- ^ Olivier Crête (junio de 2018). "Secure Video llega a la mayoría de edad" . Revista Linux Format (237).
- ^ a b c Marc Cymontkowski. "Por qué creamos SRT y la diferencia entre SRT y UDT" .
- ^ "Documentos de la API srt de Haivision"
- ^ Sharabayko, diputado; Sharabayko, MA (2020). El protocolo SRT . IETF . Proyecto de identificación-sharabayko-mops-srt . Consultado el 26 de marzo de 2020 .
- ^ "Microsoft se une al proyecto de transmisión de código abierto SRT" . El puente de transmisión . 17 de septiembre de 2018.
- ^ "Directrices de control de acceso SRT" . 7 de noviembre de 2019.
enlaces externos
- Página web oficial
- Estudio OBS
- Código fuente de la biblioteca SRT
- Diapositivas: Descripción general del protocolo SRT - IETF 107 (envío)
- SRT: breve reseña
- SRTStreamer: codificador SRT gratuito
- NDI frente a SRT