跳转至

srt: Nginx SRT 模块

安装

您可以在任何基于 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,于 2024 年 2 月 5 日发布。


Haivision SRT(安全可靠传输)/ 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 套接字的地址和端口。

有关此指令支持的可选参数的更多详细信息,请参见 nginx stream 模块的 listen 指令文档。

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

配置日志记录,详细信息请参见 nginx 核心 error_log 指令的文档。

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

创建一个新变量,其值取决于第一个参数中指定的一个或多个源变量的值。

有关更多详细信息,请参见 nginx stream 模块的 map 指令文档。

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 日志指令

access_log

  • 语法: access_log path format [buffer=size] [gzip[=level]] [flush=time] [if=condition];
  • 默认值: off
  • 上下文: srt, server

设置缓冲日志写入的路径、格式和配置。

有关更多详细信息,请参见 nginx stream 模块的 access_log 指令文档。

log_format

  • 语法: log_format name [escape=default|json|none] string ...;
  • 默认值: ``
  • 上下文: srt

定义日志格式。

有关更多详细信息,请参见 nginx stream 模块的 log_format 指令文档。

open_log_file_cache

  • 语法: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
  • 默认值: off
  • 上下文: srt, server

定义一个缓存,存储名称包含变量的频繁使用日志的文件描述符。

有关更多详细信息,请参见 nginx stream 模块的 open_log_file_cache 指令文档。

srt 代理指令

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 解密,使用提供的 key/iv,并将结果分配给第一个参数指定的变量。

stream srt 代理指令

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 流 ID,详细信息请参见 libsrt 文档中的 SRTO_STREAMID 选项。

参数值可以包含变量。

srt_proxy_passphrase

  • 语法: srt_proxy_passphrase expr;
  • 默认值: ``
  • 上下文: srt, server

设置加密的密码短语,详细信息请参见 libsrt 文档中的 SRTO_PASSPHRASE 选项。

参数值可以包含变量。

嵌入变量

核心

  • binary_remote_addr - 客户端地址的二进制形式,值的长度对于 IPv4 地址始终为 4 字节,对于 IPv6 地址始终为 16 字节
  • 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 流 ID,详细信息请参见 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

您可以在 nginx-module-srt 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。