RTMP (Real-Time Messaging Protocol) — протокол на основе TCP, разработанный Macromedia (Adobe) для низкозадержечного стриминга видео и аудио. Сервер для RTMP-стриминга принимает поток от энкодера (OBS, FFmpeg), обрабатывает его и раздаёт зрителям — напрямую или через конвертацию в более совместимые форматы HLS/DASH.
Архитектура RTMP-стриминга
- Инgest. Стример в OBS Studio настраивает RTMP URL своего сервера (rtmp://server.example.com/live) и стриим-ключ. OBS кодирует видео в H.264/H.265 и аудио в AAC, отправляет по TCP порту 1935.
- Обработка. nginx с модулем nginx-rtmp-module (или SRS, MediaMTX) принимает поток и может: записать в файл, переслать на другой RTMP-сервер (relay), конвертировать в HLS/DASH для браузеров.
- Раздача зрителям. HLS (HTTP Live Streaming) — нарезка на .ts-сегменты по 2-10 секунд + .m3u8-плейлист. Работает в любом браузере через video-тег или HLS.js.
nginx-rtmp — базовая конфигурация
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
# Конвертируем в HLS:
hls on;
hls_path /var/www/hls;
hls_fragment 3s;
hls_playlist_length 60s;
}
}
}
# В блоке http — раздаём HLS:
server {
listen 8080;
location /hls {
types { application/vnd.apple.mpegurl m3u8; }
root /var/www;
add_header Cache-Control no-cache;
}
}
История
RTMP разработан Macromedia в начале 2000-х для стриминга видео в Flash Player. После покупки Macromedia в 2005 году Adobe частично открыла спецификацию RTMP (RTMPE, RTMPS оставались проприетарными). С закатом Flash в 2020 году RTMP утратил роль протокола воспроизведения, но остался стандартом ингеста: все крупные платформы (YouTube Live, Twitch, Facebook Live) принимают потоки именно по RTMP. OBS Studio (2012) и его форк Streamlabs OBS сделали RTMP-стриминг массовым.
RTMP vs HLS vs WebRTC
| Протокол | Задержка | Совместимость | Применение |
|---|---|---|---|
| RTMP (инgest) | 1-3 сек | Энкодеры (OBS, vMix) | Передача потока на сервер |
| HLS | 5-30 сек | Все браузеры, мобильные | Раздача зрителям |
| DASH | 5-30 сек | Большинство браузеров | Адаптивный стриминг |
| WebRTC | <1 сек | Браузеры с поддержкой WebRTC | Видеозвонки, интерактивные стримы |
Сервер для стриминга: масштабирование и CDN
При большом числе зрителей (100+) основная нагрузка — исходящий трафик и CPU для параллельной раздачи HLS-сегментов. Решение: CDN для статических сегментов. nginx-rtmp пишет .ts и .m3u8 файлы в /var/www/hls/, CDN подхватывает их по HTTP. Cloudflare или StackPath кэшируют сегменты и раздают глобально — нагрузка на origin минимальна.
SRS (Simple Realtime Server) — современная альтернатива nginx-rtmp. Поддерживает WebRTC (< 1 сек задержка), HLS, RTMP в одном процессе. Go-программа с низкой latency. MediaMTX (ранее rtsp-simple-server) — для RTSP/WebRTC/RTMP/HLS. Задержка HLS: для live-стримов используй низкое число сегментов и маленький фрагмент (hls_fragment 1s), для VOD — большие (hls_fragment 10s). Low-Latency HLS (LL-HLS, Apple) снижает задержку HLS до 1-3 секунд.
Требования к серверу
Стриминг одного потока в 1080p 60fps (~8 Мбит/с) требует минимум 10 Мбит/с канала. Для 100 одновременных зрителей HLS — 800 Мбит/с исходящего или CDN для раздачи сегментов. Процессорная нагрузка nginx-rtmp на входящий поток минимальна (< 5% одного ядра). Основная нагрузка — конвертация (транскодинг) через FFmpeg при наличии достаточного CPU, если требуется несколько качеств (360p/720p/1080p).