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 IPv6bytes_received- nombre d'octets reçus du clientbytes_sent- nombre d'octets envoyés au clientconnection- numéro de série de la connexionhostname- nom d'hôtemsec- heure actuelle, en secondes avec une résolution en millisecondesnginx_version- version de nginxpeer_version- version libsrt du pair distant, consultez la documentation libsrt de l'optionSRTO_PEERVERSIONpour plus de détails.pid- PID du processus de travailprotocol- protocole utilisé pour communiquer avec le client, évalue toujours àSRTremote_addr- adresse du clientremote_port- port du clientserver_addr- adresse du serveur qui a accepté la connexionserver_port- port du serveur qui a accepté la connexionsession_time- durée de la session, en secondes avec une résolution en millisecondesstatus- statut de la sessionstream_id- identifiant de flux SRT, consultez la documentation libsrt de l'optionSRTO_STREAMIDpour plus de détails.time_iso8601- heure locale, au format standard ISO 8601time_local- heure locale, au format Common Log
En amont
upstream_addr- l'adresse IP et le port du serveur en amontupstream_bytes_received- nombre d'octets reçus du serveur en amontupstream_bytes_sent- nombre d'octets envoyés au serveur en amontupstream_connect_time- temps pour se connecter au serveur en amont, en secondes avec une résolution en millisecondesupstream_first_byte_time- temps pour recevoir le premier octet de données, en secondes avec une résolution en millisecondesupstream_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.