Nginx-RTMP Module (nginx-rtmp-module) — open-source расширение для веб-сервера nginx, реализующее поддержку протоколов RTMP (Real-Time Messaging Protocol) и HLS (HTTP Live Streaming) для видеотрансляций в реальном времени. Позволяет развернуть собственный стриминг-сервер на VPS без зависимости от YouTube, Twitch или других платформ. Стример подключается к серверу по RTMP из OBS Studio или FFmpeg, а зрители получают поток через HLS в браузере или через RTMP в медиаплеере.
Как работает
Протоколы стриминга:
- RTMP (Real-Time Messaging Protocol)
- Разработан Macromedia (ныне Adobe) в 2002 году. Бинарный протокол поверх TCP, порт 1935. Минимальная задержка (2–5 секунд). Используется для приёма потока от стримера (ingest). Браузеры не поддерживают RTMP напрямую с момента отказа от Flash (2020).
- HLS (HTTP Live Streaming)
- Разработан Apple в 2009 году (RFC 8216). Нарезает видеопоток на фрагменты (сегменты) по 2–10 секунд и раздаёт через обычный HTTP. Задержка 10–30 секунд (в зависимости от длины сегментов). Поддерживается всеми браузерами, iOS и Android нативно.
- DASH (Dynamic Adaptive Streaming over HTTP)
- Стандарт ISO (2011). Аналог HLS, поддерживает адаптивный битрейт. Менее распространён в self-hosted решениях.
Nginx-rtmp-module превращает RTMP-поток в HLS автоматически: принимает RTMP от стримера, нарезает на .ts-сегменты, генерирует m3u8-плейлист. Nginx раздаёт .ts файлы по HTTP — браузер с video.js или hls.js воспроизводит трансляцию без Flash.
Конфигурация в nginx.conf добавляет блок rtmp { } с директивой application live и вложенными hls on, hls_path /var/hls. После установки стример указывает в OBS адрес сервера (rtmp://IP/live) и stream key.
Дополнительные возможности: запись трансляции в файл (record all), ретрансляция на YouTube/Twitch одновременно с собственным сервером (push rtmp://), аутентификация потока через on_publish callback.
История
RTMP создан Macromedia (Adobe) в 2002 году для Flash Player. Открыт Adobe в 2012 году. Nginx-rtmp-module разработал Роман Арутюнян (GitHub: arut) в 2012 году. Проект активно используется, хотя официально не обновляется с 2015 года — базовая функциональность стабильна. Альтернативы: SRS (Simple RTMP Server, 2013, активно развивается), MediaMTX (2020, Go, поддерживает RTSP/WebRTC/RTMP), nginx с RTMP через livepeer-protocol. Flash EOL (декабрь 2020) переключил доставку видео на HLS; RTMP сохранился как протокол ingestion стримеров.
На что обращать внимание
Для стриминга нужна высокая пропускная способность канала: HD-трансляция (1080p 30fps, bitrate 4–6 Мбит/с) на 100 зрителей — 400–600 Мбит/с исходящего трафика. Планируйте сервер исходя из ожидаемого числа зрителей. Для большой аудитории размещайте HLS-сегменты за CDN — nginx генерирует файлы, CDN раздаёт их географически распределённо. Задержка HLS (10–30 секунд) приемлема для записи лекций и вебинаров, но неприемлема для интерактивных стримов — используйте WebRTC или LL-HLS (Low Latency HLS, задержка 2–5 сек).
RTMP-модуль Nginx
nginx-rtmp-module (Arut, 2011) — модуль для live-стриминга поверх Nginx. Принимает RTMP-потоки (порт 1935/TCP), транскодирует через FFmpeg, раздаёт HLS/DASH. Сборка: --add-module=nginx-rtmp-module. Конфиг: блок rtmp { server { application live {} } }.
Конвертация RTMP → HLS
Конфиг application live: exec ffmpeg -i rtmp://localhost/live/$name -c:v libx264 -c:a aac -f flv rtmp://localhost/hls/$name. HLS application: hls on; hls_path /var/www/hls; hls_fragment 3s. Nginx раздаёт .m3u8 + .ts файлы как обычную статику.
Производительность и альтернативы
nginx-rtmp-module: 1 vCPU обрабатывает ~10 потоков 720p. Transcoding — CPU-intensive: 1 поток 1080p ≈ 4 ядра H.264. Альтернативы: MediaMTX (ранее rtsp-simple-server) — поддерживает RTMP/RTSP/HLS/WebRTC без Nginx. SRS (Simple RTMP Server) — больше возможностей для корпоративных стримингов. CDN для видео нужен при аудитории от 100+ зрителей.
Nginx RTMP принимает стримы от OBS на VPS. SSL для RTMPS (порт 443). CDN для видео раздаёт HLS. Мониторинг через stat-модуль Nginx RTMP. Балансировщик для нескольких Origin-серверов при высокой нагрузке.