Aller au contenu

srt: Module SRT de Nginx

Installation

Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_srt_module.so;

Ce document décrit nginx-module-srt v1.1 publié le 5 février 2024.


Passerelle SRT (Secure Reliable Transfer) / TCP de Haivision. Prend en charge à la fois SRT vers TCP et TCP vers SRT, y compris le transfert de données bidirectionnel.

L'implémentation utilise libsrt pour la communication SRT. Le code libsrt s'exécute sur un thread secondaire, des notifications eventfd sont utilisées pour communiquer avec le thread principal de nginx.

Configuration

Configuration d'exemple

## SRT -> TCP proxy
srt {
    server {
        listen 4321;
        proxy_pass tcp://127.0.0.1:5678;
    }
}

## TCP -> SRT proxy
stream {
    server {
        listen 5432;
        srt_proxy_pass srt://127.0.0.1:4321;
    }
}

Directives principales srt

srt

  • syntax: srt { ... }
  • default: -
  • context: main

Fournit le contexte du fichier de configuration dans lequel les directives server srt sont spécifiées.

server

  • syntax: server { ... }
  • default: -
  • context: srt

Définit la configuration pour un serveur.

listen

  • syntax: listen address:port [backlog=number] [bind] [ipv6only=on|off] [reuseport];
  • default: -
  • context: server

Définit l'adresse et le port pour le socket UDP sur lequel le serveur acceptera les connexions.

Consultez la documentation de la directive listen du module stream de nginx pour plus de détails sur les paramètres optionnels pris en charge par cette directive.

variables_hash_max_size

  • syntax: variables_hash_max_size size;
  • default: 1024
  • context: srt

Définit la taille maximale de la table de hachage des variables.

variables_hash_bucket_size

  • syntax: variables_hash_bucket_size size;
  • default: 64
  • context: srt

Définit la taille du seau pour la table de hachage des variables.

error_log

  • syntax: error_log file [level];
  • default: logs/error.log error
  • context: srt, server

Configure la journalisation, consultez la documentation de la directive error_log du noyau nginx pour plus de détails.

fc_pkts

  • syntax: fc_pkts number;
  • default: 25600
  • context: srt, server

Définit le nombre maximum de paquets "en vol" (paquets qui ont été envoyés, mais pas encore accusés de réception).

Consultez la documentation libsrt de l'option SRTO_FC pour plus de détails.

mss

  • syntax: mss size;
  • default: 1500
  • context: srt, server

Taille maximale du segment, en octets.

Consultez la documentation libsrt de l'option SRTO_MSS pour plus de détails.

recv_buf

  • syntax: recv_buf size;
  • default: 8192 buffers
  • context: srt, server

Taille du tampon de réception, en octets.

Consultez la documentation libsrt de l'option SRTO_RCVBUF pour plus de détails.

recv_udp_buf

  • syntax: recv_udp_buf size;
  • default: 8192 buffers
  • context: srt, server

Taille du tampon de réception du socket UDP, en octets.

Consultez la documentation libsrt de l'option SRTO_UDP_RCVBUF pour plus de détails.

recv_latency

  • syntax: recv_latency size;
  • default: 120ms
  • context: srt, server

La latence du côté de la réception, en millisecondes.

Consultez la documentation libsrt de l'option SRTO_RCVLATENCY pour plus de détails.

send_buf

  • syntax: send_buf size;
  • default: 8192 buffers
  • context: srt, server

Taille du tampon d'envoi, en octets.

Consultez la documentation libsrt de l'option SRTO_SNDBUF pour plus de détails.

send_udp_buf

  • syntax: send_udp_buf size;
  • default: 65536
  • context: srt, server

Taille du tampon d'envoi du socket UDP, en octets.

Consultez la documentation libsrt de l'option SRTO_UDP_SNDBUF pour plus de détails.

send_latency

  • syntax: send_latency size;
  • default: 120ms
  • context: srt, server

La latence de réception minimale, fournie par l'expéditeur.

Consultez la documentation libsrt de l'option SRTO_PEERLATENCY pour plus de détails.

passphrase

  • syntax: passphrase expr;
  • default: ``
  • context: srt, server

Définit une phrase secrète pour le chiffrement, consultez la documentation libsrt de l'option SRTO_PASSPHRASE pour plus de détails.

La valeur du paramètre peut contenir des variables.

in_buf_size

  • syntax: in_buf_size size;
  • default: 64k
  • context: srt, server

Définit la taille du tampon utilisé pour lire les données du client.

Directives de mappage srt

map

  • syntax: map string $variable { ... }
  • default: ``
  • context: srt

Crée une nouvelle variable dont la valeur dépend des valeurs d'une ou plusieurs des variables source spécifiées dans le premier paramètre.

Consultez la documentation de la directive map du module stream de nginx pour plus de détails.

map_hash_max_size

  • syntax: map_hash_max_size size;
  • default: 2048
  • context: srt

Définit la taille maximale de la table de hachage des variables de mappage.

map_hash_bucket_size

  • syntax: map_hash_bucket_size size;
  • default: 32|64|128
  • context: srt

Définit la taille du seau pour la table de hachage des variables de mappage.

Directives de journalisation srt

access_log

  • syntax: access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition];
  • default: off
  • context: srt, server

Définit le chemin, le format et la configuration pour une écriture de journal mise en tampon.

Consultez la documentation de la directive access_log du module stream de nginx pour plus de détails.

log_format

  • syntax: log_format name [escape=default|json|none] string ...;
  • default: ``
  • context: srt

Définit un format de journal.

Consultez la documentation de la directive log_format du module stream de nginx pour plus de détails.

open_log_file_cache

  • syntax: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
  • default: off
  • context: srt, server

Définit un cache qui stocke les descripteurs de fichiers des journaux fréquemment utilisés dont les noms contiennent des variables.

Consultez la documentation de la directive open_log_file_cache du module stream de nginx pour plus de détails.

Directives de proxy srt

proxy_pass

  • syntax: proxy_pass address;
  • default: ``
  • context: srt, server

Définit l'adresse du serveur proxy.

proxy_connect_timeout

  • syntax: proxy_connect_timeout timeout;
  • default: 60s
  • context: srt, server

Définit un délai d'attente pour établir une connexion avec un serveur proxy.

proxy_timeout

  • syntax: proxy_timeout timeout;
  • default: 10m
  • context: srt, server

Définit le délai d'attente entre deux opérations de lecture ou d'écriture successives sur les connexions client ou serveur proxy. Si aucune donnée n'est transmise dans ce délai, la connexion est fermée.

proxy_buffer_size

  • syntax: proxy_buffer_size size;
  • default: 64k
  • context: srt, server

Définit la taille du tampon utilisé pour lire les données du serveur proxy.

proxy_protocol

  • syntax: proxy_protocol on | off;
  • default: off
  • context: srt, server

Active le protocole PROXY pour les connexions à un serveur proxy.

proxy_header

  • syntax: proxy_header expr;
  • default: ``
  • context: srt, server

Définit une chaîne qui est envoyée au serveur proxy avant toute donnée reçue via SRT.

La valeur du paramètre peut contenir des variables.

Directives diverses set srt

set_decode_base64

  • syntax: set_decode_base64 $dst src;
  • default: ``
  • context: srt

Effectue un décodage base64 de la valeur du deuxième argument et assigne le résultat à la variable spécifiée dans le premier argument.

set_decode_base64url

  • syntax: set_decode_base64url $dst src;
  • default: ``
  • context: srt

Effectue un décodage base64 sécurisé pour URL de la valeur du deuxième argument et assigne le résultat à la variable spécifiée dans le premier argument.

set_aes_decrypt

  • syntax: set_aes_decrypt $dst base64_key base64_iv src;
  • default: ``
  • context: srt

Effectue un déchiffrement AES-256-CBC de la valeur du dernier argument, en utilisant la clé/iv fournie, et assigne le résultat à la variable spécifiée dans le premier argument.

Directives de proxy srt dans le stream

srt_proxy_pass

  • syntax: srt_proxy_pass address;
  • default: ``
  • context: stream, server

Définit l'adresse du serveur proxy.

srt_proxy_connect_timeout

  • syntax: srt_proxy_connect_timeout timeout;
  • default: 60s
  • context: srt, server

Définit un délai d'attente pour établir une connexion avec un serveur proxy.

srt_proxy_timeout

  • syntax: srt_proxy_timeout timeout;
  • default: 10m
  • context: srt, server

Définit le délai d'attente entre deux opérations de lecture ou d'écriture successives sur les connexions client ou serveur proxy. Si aucune donnée n'est transmise dans ce délai, la connexion est fermée.

srt_proxy_buffer_size

  • syntax: srt_proxy_buffer_size size;
  • default: 64k
  • context: srt, server

Définit la taille du tampon utilisé pour lire les données du serveur proxy.

srt_proxy_stream_id

  • syntax: srt_proxy_stream_id expr;
  • default: ``
  • context: srt, server

Définit l'identifiant de flux SRT, consultez la documentation libsrt de l'option SRTO_STREAMID pour plus de détails.

La valeur du paramètre peut contenir des variables.

srt_proxy_passphrase

  • syntax: srt_proxy_passphrase expr;
  • default: ``
  • context: srt, server

Définit une phrase secrète pour le chiffrement, consultez la documentation libsrt de l'option SRTO_PASSPHRASE pour plus de détails.

La valeur du paramètre peut contenir des variables.

Variables intégrées

Noyau

  • binary_remote_addr - adresse du client sous forme binaire, la longueur de la valeur est toujours de 4 octets pour les adresses IPv4 ou de 16 octets pour les adresses IPv6
  • bytes_received - nombre d'octets reçus du client
  • bytes_sent - nombre d'octets envoyés au client
  • connection - numéro de série de la connexion
  • hostname - nom d'hôte
  • msec - heure actuelle, en secondes avec une résolution en millisecondes
  • nginx_version - version de nginx
  • peer_version - version libsrt du pair distant, consultez la documentation libsrt de l'option SRTO_PEERVERSION pour plus de détails.
  • pid - PID du processus de travail
  • protocol - protocole utilisé pour communiquer avec le client, évalue toujours à SRT
  • remote_addr - adresse du client
  • remote_port - port du client
  • server_addr - adresse du serveur qui a accepté la connexion
  • server_port - port du serveur qui a accepté la connexion
  • session_time - durée de la session, en secondes avec une résolution en millisecondes
  • status - statut de la session
  • stream_id - identifiant de flux SRT, consultez la documentation libsrt de l'option SRTO_STREAMID pour plus de détails.
  • time_iso8601 - heure locale, au format standard ISO 8601
  • time_local - heure locale, au format Common Log

En amont

  • upstream_addr - l'adresse IP et le port du serveur en amont
  • upstream_bytes_received - nombre d'octets reçus du serveur en amont
  • upstream_bytes_sent - nombre d'octets envoyés au serveur en amont
  • upstream_connect_time - temps pour se connecter au serveur en amont, en secondes avec une résolution en millisecondes
  • upstream_first_byte_time - temps pour recevoir le premier octet de données, en secondes avec une résolution en millisecondes
  • upstream_session_time - durée de la session, en secondes avec une résolution en millisecondes

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-srt.