srt: Módulo SRT do NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Ative o módulo adicionando o seguinte no topo de /etc/nginx/nginx.conf:
load_module modules/ngx_srt_module.so;
Este documento descreve o nginx-module-srt v1.1 lançado em 05 de fevereiro de 2024.
Haivision SRT (Secure Reliable Transfer) / gateway TCP. Suporta tanto SRT para TCP quanto TCP para SRT, incluindo transferência de dados bidirecional.
A implementação usa libsrt para comunicação SRT. O código libsrt é executado em uma thread secundária, e notificações eventfd são usadas para se comunicar com a thread principal do nginx.
Configuração
Configuração de exemplo
## 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;
}
}
Diretrizes principais do srt
srt
- sintaxe:
srt { ... } - padrão:
- - contexto:
main
Fornece o contexto do arquivo de configuração no qual as diretrizes server do srt são especificadas.
server
- sintaxe:
server { ... } - padrão:
- - contexto:
srt
Define a configuração para um servidor.
listen
- sintaxe:
listen address:port [backlog=number] [bind] [ipv6only=on|off] [reuseport]; - padrão:
- - contexto:
server
Define o endereço e a porta para o socket UDP no qual o servidor aceitará conexões.
Consulte a documentação da diretiva listen do módulo stream do nginx para mais detalhes sobre os parâmetros opcionais suportados por esta diretiva.
variables_hash_max_size
- sintaxe:
variables_hash_max_size size; - padrão:
1024 - contexto:
srt
Define o tamanho máximo da tabela hash de variáveis.
variables_hash_bucket_size
- sintaxe:
variables_hash_bucket_size size; - padrão:
64 - contexto:
srt
Define o tamanho do bucket para a tabela hash de variáveis.
error_log
- sintaxe:
error_log file [level]; - padrão:
logs/error.log error - contexto:
srt, server
Configura o registro, consulte a documentação da diretiva error_log do núcleo do nginx para mais detalhes.
fc_pkts
- sintaxe:
fc_pkts number; - padrão:
25600 - contexto:
srt, server
Define o número máximo de pacotes "em voo" (pacotes que foram enviados, mas ainda não foram reconhecidos).
Consulte a documentação da libsrt da opção SRTO_FC para mais detalhes.
mss
- sintaxe:
mss size; - padrão:
1500 - contexto:
srt, server
Tamanho máximo do segmento, em bytes.
Consulte a documentação da libsrt da opção SRTO_MSS para mais detalhes.
recv_buf
- sintaxe:
recv_buf size; - padrão:
8192 buffers - contexto:
srt, server
Tamanho do buffer de recebimento, em bytes.
Consulte a documentação da libsrt da opção SRTO_RCVBUF para mais detalhes.
recv_udp_buf
- sintaxe:
recv_udp_buf size; - padrão:
8192 buffers - contexto:
srt, server
Tamanho do buffer de recebimento do socket UDP, em bytes.
Consulte a documentação da libsrt da opção SRTO_UDP_RCVBUF para mais detalhes.
recv_latency
- sintaxe:
recv_latency size; - padrão:
120ms - contexto:
srt, server
A latência no lado do receptor, em milissegundos.
Consulte a documentação da libsrt da opção SRTO_RCVLATENCY para mais detalhes.
send_buf
- sintaxe:
send_buf size; - padrão:
8192 buffers - contexto:
srt, server
Tamanho do buffer de envio, em bytes.
Consulte a documentação da libsrt da opção SRTO_SNDBUF para mais detalhes.
send_udp_buf
- sintaxe:
send_udp_buf size; - padrão:
65536 - contexto:
srt, server
Tamanho do buffer de envio do socket UDP, em bytes.
Consulte a documentação da libsrt da opção SRTO_UDP_SNDBUF para mais detalhes.
send_latency
- sintaxe:
send_latency size; - padrão:
120ms - contexto:
srt, server
A latência mínima de recebimento, fornecida pelo remetente.
Consulte a documentação da libsrt da opção SRTO_PEERLATENCY para mais detalhes.
passphrase
- sintaxe:
passphrase expr; - padrão: ``
- contexto:
srt, server
Define uma frase secreta para criptografia, consulte a documentação da libsrt da opção SRTO_PASSPHRASE para mais detalhes.
O valor do parâmetro pode conter variáveis.
in_buf_size
- sintaxe:
in_buf_size size; - padrão:
64k - contexto:
srt, server
Define o tamanho do buffer usado para ler dados do cliente.
Diretrizes de mapeamento do srt
map
- sintaxe:
map string $variable { ... } - padrão: ``
- contexto:
srt
Cria uma nova variável cujo valor depende dos valores de uma ou mais das variáveis de origem especificadas no primeiro parâmetro.
Consulte a documentação da diretiva map do módulo stream do nginx para mais detalhes.
map_hash_max_size
- sintaxe:
map_hash_max_size size; - padrão:
2048 - contexto:
srt
Define o tamanho máximo da tabela hash de variáveis de mapeamento.
map_hash_bucket_size
- sintaxe:
map_hash_bucket_size size; - padrão:
32|64|128 - contexto:
srt
Define o tamanho do bucket para a tabela hash de variáveis de mapeamento.
Diretrizes de log do srt
access_log
- sintaxe:
access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition]; - padrão:
off - contexto:
srt, server
Define o caminho, formato e configuração para uma gravação de log em buffer.
Consulte a documentação da diretiva access_log do módulo stream do nginx para mais detalhes.
log_format
- sintaxe:
log_format name [escape=default|json|none] string ...; - padrão: ``
- contexto:
srt
Define um formato de log.
Consulte a documentação da diretiva log_format do módulo stream do nginx para mais detalhes.
open_log_file_cache
- sintaxe:
open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time]; - padrão:
off - contexto:
srt, server
Define um cache que armazena os descritores de arquivos de logs frequentemente usados cujos nomes contêm variáveis.
Consulte a documentação da diretiva open_log_file_cache do módulo stream do nginx para mais detalhes.
Diretrizes de proxy do srt
proxy_pass
- sintaxe:
proxy_pass address; - padrão: ``
- contexto:
srt, server
Define o endereço do servidor proxy.
proxy_connect_timeout
- sintaxe:
proxy_connect_timeout timeout; - padrão:
60s - contexto:
srt, server
Define um tempo limite para estabelecer uma conexão com um servidor proxy.
proxy_timeout
- sintaxe:
proxy_timeout timeout; - padrão:
10m - contexto:
srt, server
Define o tempo limite entre duas operações de leitura ou gravação sucessivas nas conexões do cliente ou do servidor proxy. Se nenhum dado for transmitido dentro desse tempo, a conexão é fechada.
proxy_buffer_size
- sintaxe:
proxy_buffer_size size; - padrão:
64k - contexto:
srt, server
Define o tamanho do buffer usado para ler dados do servidor proxy.
proxy_protocol
- sintaxe:
proxy_protocol on | off; - padrão:
off - contexto:
srt, server
Habilita o protocolo PROXY para conexões com um servidor proxy.
proxy_header
- sintaxe:
proxy_header expr; - padrão: ``
- contexto:
srt, server
Define uma string que é enviada ao servidor proxy antes de qualquer dado recebido via SRT.
O valor do parâmetro pode conter variáveis.
Diretrizes diversas do srt
set_decode_base64
- sintaxe:
set_decode_base64 $dst src; - padrão: ``
- contexto:
srt
Realiza a decodificação base64 do valor do segundo argumento e atribui o resultado à variável especificada no primeiro argumento.
set_decode_base64url
- sintaxe:
set_decode_base64url $dst src; - padrão: ``
- contexto:
srt
Realiza a decodificação url-safe-base64 do valor do segundo argumento e atribui o resultado à variável especificada no primeiro argumento.
set_aes_decrypt
- sintaxe:
set_aes_decrypt $dst base64_key base64_iv src; - padrão: ``
- contexto:
srt
Realiza a decriptação AES-256-CBC do valor do último argumento, usando a chave/iv fornecida, e atribui o resultado à variável especificada no primeiro argumento.
Diretrizes de proxy srt do stream
srt_proxy_pass
- sintaxe:
srt_proxy_pass address; - padrão: ``
- contexto:
stream, server
Define o endereço do servidor proxy.
srt_proxy_connect_timeout
- sintaxe:
srt_proxy_connect_timeout timeout; - padrão:
60s - contexto:
srt, server
Define um tempo limite para estabelecer uma conexão com um servidor proxy.
srt_proxy_timeout
- sintaxe:
srt_proxy_timeout timeout; - padrão:
10m - contexto:
srt, server
Define o tempo limite entre duas operações de leitura ou gravação sucessivas nas conexões do cliente ou do servidor proxy. Se nenhum dado for transmitido dentro desse tempo, a conexão é fechada.
srt_proxy_buffer_size
- sintaxe:
srt_proxy_buffer_size size; - padrão:
64k - contexto:
srt, server
Define o tamanho do buffer usado para ler dados do servidor proxy.
srt_proxy_stream_id
- sintaxe:
srt_proxy_stream_id expr; - padrão: ``
- contexto:
srt, server
Define o ID do stream SRT, consulte a documentação da libsrt da opção SRTO_STREAMID para mais detalhes.
O valor do parâmetro pode conter variáveis.
srt_proxy_passphrase
- sintaxe:
srt_proxy_passphrase expr; - padrão: ``
- contexto:
srt, server
Define uma frase secreta para criptografia, consulte a documentação da libsrt da opção SRTO_PASSPHRASE para mais detalhes.
O valor do parâmetro pode conter variáveis.
Variáveis Embutidas
Núcleo
binary_remote_addr- endereço do cliente em forma binária, o comprimento do valor é sempre 4 bytes para endereços IPv4 ou 16 bytes para endereços IPv6bytes_received- número de bytes recebidos do clientebytes_sent- número de bytes enviados ao clienteconnection- número de série da conexãohostname- nome do hostmsec- hora atual, em segundos com resolução de milissegundosnginx_version- versão do nginxpeer_version- versão da libsrt do par remoto, consulte a documentação da libsrt da opçãoSRTO_PEERVERSIONpara mais detalhes.pid- PID do processo workerprotocol- protocolo usado para se comunicar com o cliente, sempre avalia paraSRTremote_addr- endereço do clienteremote_port- porta do clienteserver_addr- o endereço do servidor que aceitou a conexãoserver_port- a porta do servidor que aceitou a conexãosession_time- duração da sessão, em segundos com resolução de milissegundosstatus- status da sessãostream_id- ID do stream SRT, consulte a documentação da libsrt da opçãoSRTO_STREAMIDpara mais detalhes.time_iso8601- hora local, no formato padrão ISO 8601time_local- hora local, no formato de Log Comum
Upstream
upstream_addr- o endereço IP e a porta do servidor upstreamupstream_bytes_received- número de bytes recebidos do servidor upstreamupstream_bytes_sent- número de bytes enviados ao servidor upstreamupstream_connect_time- tempo para conectar ao servidor upstream, em segundos com resolução de milissegundosupstream_first_byte_time- tempo para receber o primeiro byte de dados, em segundos com resolução de milissegundosupstream_session_time- duração da sessão, em segundos com resolução de milissegundos
GitHub
Você pode encontrar dicas adicionais de configuração e documentação para este módulo no repositório do GitHub para nginx-module-srt.