srt: Módulo SRT de Nginx
Instalación
Puedes instalar este módulo en cualquier distribución basada en RHEL, incluyendo, pero no limitado a:
- RedHat Enterprise Linux 7, 8, 9 y 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 y Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-srt
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-srt
Habilita el módulo añadiendo lo siguiente en la parte superior de /etc/nginx/nginx.conf:
load_module modules/ngx_srt_module.so;
Este documento describe nginx-module-srt v1.1 lanzado el 05 de febrero de 2024.
Puerta de enlace SRT (Secure Reliable Transfer) / TCP de Haivision. Soporta tanto SRT a TCP como TCP a SRT, incluyendo transferencia de datos bidireccional.
La implementación utiliza libsrt para la comunicación SRT. El código de libsrt se ejecuta en un hilo secundario, se utilizan notificaciones eventfd para comunicarse con el hilo principal de nginx.
Configuración
Configuración de ejemplo
## Proxy SRT -> TCP
srt {
server {
listen 4321;
proxy_pass tcp://127.0.0.1:5678;
}
}
## Proxy TCP -> SRT
stream {
server {
listen 5432;
srt_proxy_pass srt://127.0.0.1:4321;
}
}
Directivas principales de srt
srt
- sintaxis:
srt { ... } - predeterminado:
- - contexto:
main
Proporciona el contexto del archivo de configuración en el que se especifican las directivas server de srt.
server
- sintaxis:
server { ... } - predeterminado:
- - contexto:
srt
Establece la configuración para un servidor.
listen
- sintaxis:
listen address:port [backlog=number] [bind] [ipv6only=on|off] [reuseport]; - predeterminado:
- - contexto:
server
Establece la dirección y el puerto para el socket UDP en el que el servidor aceptará conexiones.
Consulta la documentación de la directiva listen del módulo stream de nginx para más detalles sobre los parámetros opcionales soportados por esta directiva.
variables_hash_max_size
- sintaxis:
variables_hash_max_size size; - predeterminado:
1024 - contexto:
srt
Establece el tamaño máximo de la tabla hash de variables.
variables_hash_bucket_size
- sintaxis:
variables_hash_bucket_size size; - predeterminado:
64 - contexto:
srt
Establece el tamaño del bucket para la tabla hash de variables.
error_log
- sintaxis:
error_log file [level]; - predeterminado:
logs/error.log error - contexto:
srt, server
Configura el registro, consulta la documentación de la directiva error_log del núcleo de nginx para más detalles.
fc_pkts
- sintaxis:
fc_pkts number; - predeterminado:
25600 - contexto:
srt, server
Establece el número máximo de paquetes "en vuelo" (paquetes que fueron enviados, pero aún no reconocidos).
Consulta la documentación de libsrt de la opción SRTO_FC para más detalles.
mss
- sintaxis:
mss size; - predeterminado:
1500 - contexto:
srt, server
Tamaño máximo de segmento, en bytes.
Consulta la documentación de libsrt de la opción SRTO_MSS para más detalles.
recv_buf
- sintaxis:
recv_buf size; - predeterminado:
8192 buffers - contexto:
srt, server
Tamaño del buffer de recepción, en bytes.
Consulta la documentación de libsrt de la opción SRTO_RCVBUF para más detalles.
recv_udp_buf
- sintaxis:
recv_udp_buf size; - predeterminado:
8192 buffers - contexto:
srt, server
Tamaño del buffer de recepción del socket UDP, en bytes.
Consulta la documentación de libsrt de la opción SRTO_UDP_RCVBUF para más detalles.
recv_latency
- sintaxis:
recv_latency size; - predeterminado:
120ms - contexto:
srt, server
La latencia en el lado receptor, en milisegundos.
Consulta la documentación de libsrt de la opción SRTO_RCVLATENCY para más detalles.
send_buf
- sintaxis:
send_buf size; - predeterminado:
8192 buffers - contexto:
srt, server
Tamaño del buffer de envío, en bytes.
Consulta la documentación de libsrt de la opción SRTO_SNDBUF para más detalles.
send_udp_buf
- sintaxis:
send_udp_buf size; - predeterminado:
65536 - contexto:
srt, server
Tamaño del buffer de envío del socket UDP, en bytes.
Consulta la documentación de libsrt de la opción SRTO_UDP_SNDBUF para más detalles.
send_latency
- sintaxis:
send_latency size; - predeterminado:
120ms - contexto:
srt, server
La latencia mínima de recepción, proporcionada por el emisor.
Consulta la documentación de libsrt de la opción SRTO_PEERLATENCY para más detalles.
passphrase
- sintaxis:
passphrase expr; - predeterminado: ``
- contexto:
srt, server
Establece una frase de paso para la encriptación, consulta la documentación de libsrt de la opción SRTO_PASSPHRASE para más detalles.
El valor del parámetro puede contener variables.
in_buf_size
- sintaxis:
in_buf_size size; - predeterminado:
64k - contexto:
srt, server
Establece el tamaño del buffer utilizado para leer datos del cliente.
Directivas de mapeo de srt
map
- sintaxis:
map string $variable { ... } - predeterminado: ``
- contexto:
srt
Crea una nueva variable cuyo valor depende de los valores de una o más de las variables fuente especificadas en el primer parámetro.
Consulta la documentación de la directiva map del módulo stream de nginx para más detalles.
map_hash_max_size
- sintaxis:
map_hash_max_size size; - predeterminado:
2048 - contexto:
srt
Establece el tamaño máximo de la tabla hash de variables de mapeo.
map_hash_bucket_size
- sintaxis:
map_hash_bucket_size size; - predeterminado:
32|64|128 - contexto:
srt
Establece el tamaño del bucket para la tabla hash de variables de mapeo.
Directivas de registro de srt
access_log
- sintaxis:
access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition]; - predeterminado:
off - contexto:
srt, server
Establece la ruta, formato y configuración para una escritura de registro en buffer.
Consulta la documentación de la directiva access_log del módulo stream de nginx para más detalles.
log_format
- sintaxis:
log_format name [escape=default|json|none] string ...; - predeterminado: ``
- contexto:
srt
Define un formato de registro.
Consulta la documentación de la directiva log_format del módulo stream de nginx para más detalles.
open_log_file_cache
- sintaxis:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; - predeterminado:
off - contexto:
srt, server
Define una caché que almacena los descriptores de archivo de registros utilizados frecuentemente cuyos nombres contienen variables.
Consulta la documentación de la directiva open_log_file_cache del módulo stream de nginx para más detalles.
Directivas de proxy de srt
proxy_pass
- sintaxis:
proxy_pass address; - predeterminado: ``
- contexto:
srt, server
Establece la dirección del servidor proxy.
proxy_connect_timeout
- sintaxis:
proxy_connect_timeout timeout; - predeterminado:
60s - contexto:
srt, server
Define un tiempo de espera para establecer una conexión con un servidor proxy.
proxy_timeout
- sintaxis:
proxy_timeout timeout; - predeterminado:
10m - contexto:
srt, server
Establece el tiempo de espera entre dos operaciones de lectura o escritura sucesivas en conexiones de cliente o servidor proxy. Si no se transmiten datos dentro de este tiempo, la conexión se cierra.
proxy_buffer_size
- sintaxis:
proxy_buffer_size size; - predeterminado:
64k - contexto:
srt, server
Establece el tamaño del buffer utilizado para leer datos del servidor proxy.
proxy_protocol
- sintaxis:
proxy_protocol on | off; - predeterminado:
off - contexto:
srt, server
Habilita el protocolo PROXY para conexiones a un servidor proxy.
proxy_header
- sintaxis:
proxy_header expr; - predeterminado: ``
- contexto:
srt, server
Define una cadena que se envía al servidor proxy antes de cualquier dato recibido a través de SRT.
El valor del parámetro puede contener variables.
Directivas misceláneas de set de srt
set_decode_base64
- sintaxis:
set_decode_base64 $dst src; - predeterminado: ``
- contexto:
srt
Realiza la decodificación base64 del valor del segundo argumento y asigna el resultado a la variable especificada en el primer argumento.
set_decode_base64url
- sintaxis:
set_decode_base64url $dst src; - predeterminado: ``
- contexto:
srt
Realiza la decodificación base64 segura para URL del valor del segundo argumento y asigna el resultado a la variable especificada en el primer argumento.
set_aes_decrypt
- sintaxis:
set_aes_decrypt $dst base64_key base64_iv src; - predeterminado: ``
- contexto:
srt
Realiza la desencriptación AES-256-CBC del valor del último argumento, utilizando la clave/iv proporcionada, y asigna el resultado a la variable especificada en el primer argumento.
Directivas de proxy srt de stream
srt_proxy_pass
- sintaxis:
srt_proxy_pass address; - predeterminado: ``
- contexto:
stream, server
Establece la dirección del servidor proxy.
srt_proxy_connect_timeout
- sintaxis:
srt_proxy_connect_timeout timeout; - predeterminado:
60s - contexto:
srt, server
Define un tiempo de espera para establecer una conexión con un servidor proxy.
srt_proxy_timeout
- sintaxis:
srt_proxy_timeout timeout; - predeterminado:
10m - contexto:
srt, server
Establece el tiempo de espera entre dos operaciones de lectura o escritura sucesivas en conexiones de cliente o servidor proxy. Si no se transmiten datos dentro de este tiempo, la conexión se cierra.
srt_proxy_buffer_size
- sintaxis:
srt_proxy_buffer_size size; - predeterminado:
64k - contexto:
srt, server
Establece el tamaño del buffer utilizado para leer datos del servidor proxy.
srt_proxy_stream_id
- sintaxis:
srt_proxy_stream_id expr; - predeterminado: ``
- contexto:
srt, server
Establece el ID de flujo SRT, consulta la documentación de libsrt de la opción SRTO_STREAMID para más detalles.
El valor del parámetro puede contener variables.
srt_proxy_passphrase
- sintaxis:
srt_proxy_passphrase expr; - predeterminado: ``
- contexto:
srt, server
Establece una frase de paso para la encriptación, consulta la documentación de libsrt de la opción SRTO_PASSPHRASE para más detalles.
El valor del parámetro puede contener variables.
Variables Embebidas
Núcleo
binary_remote_addr- dirección del cliente en forma binaria, la longitud del valor es siempre de 4 bytes para direcciones IPv4 o 16 bytes para direcciones IPv6bytes_received- número de bytes recibidos del clientebytes_sent- número de bytes enviados al clienteconnection- número de serie de la conexiónhostname- nombre del hostmsec- tiempo actual, en segundos con resolución de milisegundosnginx_version- versión de nginxpeer_version- versión de libsrt del par remoto, consulta la documentación de libsrt de la opciónSRTO_PEERVERSIONpara más detalles.pid- PID del proceso trabajadorprotocol- protocolo utilizado para comunicarse con el cliente, siempre evalúa aSRTremote_addr- dirección del clienteremote_port- puerto del clienteserver_addr- dirección del servidor que aceptó la conexiónserver_port- puerto del servidor que aceptó la conexiónsession_time- duración de la sesión, en segundos con resolución de milisegundosstatus- estado de la sesiónstream_id- ID de flujo SRT, consulta la documentación de libsrt de la opciónSRTO_STREAMIDpara más detalles.time_iso8601- hora local, en formato estándar ISO 8601time_local- hora local, en el Formato de Registro Común
Upstream
upstream_addr- la dirección IP y el puerto del servidor upstreamupstream_bytes_received- número de bytes recibidos del servidor upstreamupstream_bytes_sent- número de bytes enviados al servidor upstreamupstream_connect_time- tiempo para conectarse al servidor upstream, en segundos con resolución de milisegundosupstream_first_byte_time- tiempo para recibir el primer byte de datos, en segundos con resolución de milisegundosupstream_session_time- duración de la sesión, en segundos con resolución de milisegundos
GitHub
Puedes encontrar consejos de configuración adicionales y documentación para este módulo en el repositorio de GitHub para nginx-module-srt.