Pular para conteúdo

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 IPv6
  • bytes_received - número de bytes recebidos do cliente
  • bytes_sent - número de bytes enviados ao cliente
  • connection - número de série da conexão
  • hostname - nome do host
  • msec - hora atual, em segundos com resolução de milissegundos
  • nginx_version - versão do nginx
  • peer_version - versão da libsrt do par remoto, consulte a documentação da libsrt da opção SRTO_PEERVERSION para mais detalhes.
  • pid - PID do processo worker
  • protocol - protocolo usado para se comunicar com o cliente, sempre avalia para SRT
  • remote_addr - endereço do cliente
  • remote_port - porta do cliente
  • server_addr - o endereço do servidor que aceitou a conexão
  • server_port - a porta do servidor que aceitou a conexão
  • session_time - duração da sessão, em segundos com resolução de milissegundos
  • status - status da sessão
  • stream_id - ID do stream SRT, consulte a documentação da libsrt da opção SRTO_STREAMID para mais detalhes.
  • time_iso8601 - hora local, no formato padrão ISO 8601
  • time_local - hora local, no formato de Log Comum

Upstream

  • upstream_addr - o endereço IP e a porta do servidor upstream
  • upstream_bytes_received - número de bytes recebidos do servidor upstream
  • upstream_bytes_sent - número de bytes enviados ao servidor upstream
  • upstream_connect_time - tempo para conectar ao servidor upstream, em segundos com resolução de milissegundos
  • upstream_first_byte_time - tempo para receber o primeiro byte de dados, em segundos com resolução de milissegundos
  • upstream_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.