Перейти к содержанию

srt: Модуль SRT для Nginx

Установка

Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:

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

Включите модуль, добавив следующее в верхнюю часть файла /etc/nginx/nginx.conf:

load_module modules/ngx_srt_module.so;

Этот документ описывает nginx-module-srt v1.1, выпущенный 5 февраля 2024 года.


Haivision SRT (Secure Reliable Transfer) / TCP шлюз. Поддерживает как SRT к TCP, так и TCP к SRT, включая двунаправленный обмен данными.

Реализация использует libsrt для SRT-коммуникации. Код libsrt выполняется в побочном потоке, используются уведомления eventfd для связи с основным потоком nginx.

Конфигурация

Пример конфигурации

## SRT -> TCP прокси
srt {
    server {
        listen 4321;
        proxy_pass tcp://127.0.0.1:5678;
    }
}

## TCP -> SRT прокси
stream {
    server {
        listen 5432;
        srt_proxy_pass srt://127.0.0.1:4321;
    }
}

Основные директивы srt

srt

  • синтаксис: srt { ... }
  • по умолчанию: -
  • контекст: main

Обеспечивает контекст конфигурационного файла, в котором указываются директивы srt server.

server

  • синтаксис: server { ... }
  • по умолчанию: -
  • контекст: srt

Устанавливает конфигурацию для сервера.

listen

  • синтаксис: listen address:port [backlog=number] [bind] [ipv6only=on|off] [reuseport];
  • по умолчанию: -
  • контекст: server

Устанавливает адрес и порт для UDP-сокета, на котором сервер будет принимать соединения.

Смотрите документацию директивы listen модуля nginx stream для получения дополнительных сведений о поддерживаемых опциональных параметрах.

variables_hash_max_size

  • синтаксис: variables_hash_max_size size;
  • по умолчанию: 1024
  • контекст: srt

Устанавливает максимальный размер хеш-таблицы переменных.

variables_hash_bucket_size

  • синтаксис: variables_hash_bucket_size size;
  • по умолчанию: 64
  • контекст: srt

Устанавливает размер ведра для хеш-таблицы переменных.

error_log

  • синтаксис: error_log file [level];
  • по умолчанию: logs/error.log error
  • контекст: srt, server

Настраивает ведение журнала, смотрите документацию директивы error_log ядра nginx для получения дополнительных сведений.

fc_pkts

  • синтаксис: fc_pkts number;
  • по умолчанию: 25600
  • контекст: srt, server

Устанавливает максимальное количество "в пути" пакетов (пакеты, которые были отправлены, но еще не подтверждены).

Смотрите документацию libsrt по опции SRTO_FC для получения дополнительных сведений.

mss

  • синтаксис: mss size;
  • по умолчанию: 1500
  • контекст: srt, server

Максимальный размер сегмента в байтах.

Смотрите документацию libsrt по опции SRTO_MSS для получения дополнительных сведений.

recv_buf

  • синтаксис: recv_buf size;
  • по умолчанию: 8192 buffers
  • контекст: srt, server

Размер буфера приема в байтах.

Смотрите документацию libsrt по опции SRTO_RCVBUF для получения дополнительных сведений.

recv_udp_buf

  • синтаксис: recv_udp_buf size;
  • по умолчанию: 8192 buffers
  • контекст: srt, server

Размер буфера приема UDP-сокета в байтах.

Смотрите документацию libsrt по опции SRTO_UDP_RCVBUF для получения дополнительных сведений.

recv_latency

  • синтаксис: recv_latency size;
  • по умолчанию: 120ms
  • контекст: srt, server

Задержка на стороне приема в миллисекундах.

Смотрите документацию libsrt по опции SRTO_RCVLATENCY для получения дополнительных сведений.

send_buf

  • синтаксис: send_buf size;
  • по умолчанию: 8192 buffers
  • контекст: srt, server

Размер буфера отправки в байтах.

Смотрите документацию libsrt по опции SRTO_SNDBUF для получения дополнительных сведений.

send_udp_buf

  • синтаксис: send_udp_buf size;
  • по умолчанию: 65536
  • контекст: srt, server

Размер буфера отправки UDP-сокета в байтах.

Смотрите документацию libsrt по опции SRTO_UDP_SNDBUF для получения дополнительных сведений.

send_latency

  • синтаксис: send_latency size;
  • по умолчанию: 120ms
  • контекст: srt, server

Минимальная задержка приема, предоставляемая отправителем.

Смотрите документацию libsrt по опции SRTO_PEERLATENCY для получения дополнительных сведений.

passphrase

  • синтаксис: passphrase expr;
  • по умолчанию: ``
  • контекст: srt, server

Устанавливает пароль для шифрования, смотрите документацию libsrt по опции SRTO_PASSPHRASE для получения дополнительных сведений.

Значение параметра может содержать переменные.

in_buf_size

  • синтаксис: in_buf_size size;
  • по умолчанию: 64k
  • контекст: srt, server

Устанавливает размер буфера, используемого для чтения данных от клиента.

Директивы srt map

map

  • синтаксис: map string $variable { ... }
  • по умолчанию: ``
  • контекст: srt

Создает новую переменную, значение которой зависит от значений одной или нескольких исходных переменных, указанных в первом параметре.

Смотрите документацию директивы map модуля nginx stream для получения дополнительных сведений.

map_hash_max_size

  • синтаксис: map_hash_max_size size;
  • по умолчанию: 2048
  • контекст: srt

Устанавливает максимальный размер хеш-таблицы переменных map.

map_hash_bucket_size

  • синтаксис: map_hash_bucket_size size;
  • по умолчанию: 32|64|128
  • контекст: srt

Устанавливает размер ведра для хеш-таблицы переменных map.

Директивы srt log

access_log

  • синтаксис: access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition];
  • по умолчанию: off
  • контекст: srt, server

Устанавливает путь, формат и конфигурацию для записи буферизованного журнала.

Смотрите документацию директивы access_log модуля nginx stream для получения дополнительных сведений.

log_format

  • синтаксис: log_format name [escape=default|json|none] string ...;
  • по умолчанию: ``
  • контекст: srt

Определяет формат журнала.

Смотрите документацию директивы log_format модуля nginx stream для получения дополнительных сведений.

open_log_file_cache

  • синтаксис: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
  • по умолчанию: off
  • контекст: srt, server

Определяет кэш, который хранит дескрипторы файлов часто используемых журналов, имена которых содержат переменные.

Смотрите документацию директивы open_log_file_cache модуля nginx stream для получения дополнительных сведений.

Директивы srt proxy

proxy_pass

  • синтаксис: proxy_pass address;
  • по умолчанию: ``
  • контекст: srt, server

Устанавливает адрес проксируемого сервера.

proxy_connect_timeout

  • синтаксис: proxy_connect_timeout timeout;
  • по умолчанию: 60s
  • контекст: srt, server

Определяет тайм-аут для установления соединения с проксируемым сервером.

proxy_timeout

  • синтаксис: proxy_timeout timeout;
  • по умолчанию: 10m
  • контекст: srt, server

Устанавливает тайм-аут между двумя последовательными операциями чтения или записи на соединениях с клиентом или проксируемым сервером. Если данные не передаются в течение этого времени, соединение закрывается.

proxy_buffer_size

  • синтаксис: proxy_buffer_size size;
  • по умолчанию: 64k
  • контекст: srt, server

Устанавливает размер буфера, используемого для чтения данных с проксируемого сервера.

proxy_protocol

  • синтаксис: proxy_protocol on | off;
  • по умолчанию: off
  • контекст: srt, server

Включает протокол PROXY для соединений с проксируемым сервером.

proxy_header

  • синтаксис: proxy_header expr;
  • по умолчанию: ``
  • контекст: srt, server

Определяет строку, которая отправляется на проксируемый сервер перед любыми данными, полученными по SRT.

Значение параметра может содержать переменные.

Разные директивы srt set

set_decode_base64

  • синтаксис: set_decode_base64 $dst src;
  • по умолчанию: ``
  • контекст: srt

Выполняет декодирование base64 значения второго аргумента и присваивает результат переменной, указанной в первом аргументе.

set_decode_base64url

  • синтаксис: set_decode_base64url $dst src;
  • по умолчанию: ``
  • контекст: srt

Выполняет безопасное для URL декодирование base64 значения второго аргумента и присваивает результат переменной, указанной в первом аргументе.

set_aes_decrypt

  • синтаксис: set_aes_decrypt $dst base64_key base64_iv src;
  • по умолчанию: ``
  • контекст: srt

Выполняет расшифровку AES-256-CBC значения последнего аргумента, используя предоставленный ключ/iv, и присваивает результат переменной, указанной в первом аргументе.

Директивы srt proxy для потока

srt_proxy_pass

  • синтаксис: srt_proxy_pass address;
  • по умолчанию: ``
  • контекст: stream, server

Устанавливает адрес проксируемого сервера.

srt_proxy_connect_timeout

  • синтаксис: srt_proxy_connect_timeout timeout;
  • по умолчанию: 60s
  • контекст: srt, server

Определяет тайм-аут для установления соединения с проксируемым сервером.

srt_proxy_timeout

  • синтаксис: srt_proxy_timeout timeout;
  • по умолчанию: 10m
  • контекст: srt, server

Устанавливает тайм-аут между двумя последовательными операциями чтения или записи на соединениях с клиентом или проксируемым сервером. Если данные не передаются в течение этого времени, соединение закрывается.

srt_proxy_buffer_size

  • синтаксис: srt_proxy_buffer_size size;
  • по умолчанию: 64k
  • контекст: srt, server

Устанавливает размер буфера, используемого для чтения данных с проксируемого сервера.

srt_proxy_stream_id

  • синтаксис: srt_proxy_stream_id expr;
  • по умолчанию: ``
  • контекст: srt, server

Устанавливает идентификатор потока SRT, смотрите документацию libsrt по опции SRTO_STREAMID для получения дополнительных сведений.

Значение параметра может содержать переменные.

srt_proxy_passphrase

  • синтаксис: srt_proxy_passphrase expr;
  • по умолчанию: ``
  • контекст: srt, server

Устанавливает пароль для шифрования, смотрите документацию libsrt по опции SRTO_PASSPHRASE для получения дополнительных сведений.

Значение параметра может содержать переменные.

Встроенные переменные

Ядро

  • binary_remote_addr - адрес клиента в двоичном формате, длина значения всегда 4 байта для IPv4 адресов или 16 байт для IPv6 адресов
  • bytes_received - количество байт, полученных от клиента
  • bytes_sent - количество байт, отправленных клиенту
  • connection - серийный номер соединения
  • hostname - имя хоста
  • msec - текущее время в секундах с разрешением до миллисекунд
  • nginx_version - версия nginx
  • peer_version - версия libsrt удаленного пира, смотрите документацию libsrt по опции SRTO_PEERVERSION для получения дополнительных сведений.
  • pid - PID рабочего процесса
  • protocol - протокол, используемый для связи с клиентом, всегда равен SRT
  • remote_addr - адрес клиента
  • remote_port - порт клиента
  • server_addr - адрес сервера, который принял соединение
  • server_port - порт сервера, который принял соединение
  • session_time - продолжительность сессии в секундах с разрешением до миллисекунд
  • status - статус сессии
  • stream_id - идентификатор потока SRT, смотрите документацию libsrt по опции SRTO_STREAMID для получения дополнительных сведений.
  • time_iso8601 - местное время в формате ISO 8601
  • time_local - местное время в формате общего журнала

Восходящий поток

  • upstream_addr - IP-адрес и порт восходящего сервера
  • upstream_bytes_received - количество байт, полученных от восходящего сервера
  • upstream_bytes_sent - количество байт, отправленных на восходящий сервер
  • upstream_connect_time - время подключения к восходящему серверу в секундах с разрешением до миллисекунд
  • upstream_first_byte_time - время получения первого байта данных в секундах с разрешением до миллисекунд
  • upstream_session_time - продолжительность сессии в секундах с разрешением до миллисекунд

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-srt.