- Home »

Настройка сервера потокового видео с Nginx RTMP на Ubuntu 24
Потоковое видео стало неотъемлемой частью современного интернета, а самостоятельная настройка RTMP-сервера дает полный контроль над стримингом без зависимости от внешних платформ. Nginx RTMP — это мощный, гибкий и бесплатный инструмент для создания собственного стримингового сервера, который может конкурировать с дорогими коммерческими решениями. В этой статье разберем пошаговую настройку на Ubuntu 24.04 LTS, рассмотрим практические кейсы и подводные камни, с которыми можете столкнуться.
Как работает Nginx RTMP
Nginx RTMP — это модуль для веб-сервера Nginx, который добавляет поддержку протокола RTMP (Real-Time Messaging Protocol). Архитектура довольно элегантная:
- Инджест — прием потока от стримера через RTMP
- Трансляция — ретрансляция потока на другие платформы (YouTube, Twitch)
- Запись — автоматическое сохранение стрима в файл
- Воспроизведение — раздача потока зрителям через HTTP/HLS
Модуль работает асинхронно, что позволяет обрабатывать тысячи одновременных соединений на одном сервере. Для серьезных проектов понадобится VPS с достаточными ресурсами или даже выделенный сервер.
Установка и базовая настройка
Начнем с установки необходимых пакетов:
# Обновляем систему
sudo apt update && sudo apt upgrade -y
# Устанавливаем зависимости
sudo apt install -y build-essential libpcre3-dev libssl-dev zlib1g-dev libgd-dev libgeoip-dev libxslt1-dev
# Скачиваем исходники Nginx
cd /tmp
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -xzf nginx-1.24.0.tar.gz
# Клонируем модуль RTMP
git clone https://github.com/arut/nginx-rtmp-module.git
# Компилируем Nginx с модулем RTMP
cd nginx-1.24.0
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
make
sudo make install
Создаем systemd-сервис для автозапуска:
sudo nano /etc/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5
PrivateTmp=true
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx
Настройка конфигурации RTMP
Основная магия происходит в конфигурационном файле. Создаем продвинутую конфигурацию:
sudo nano /usr/local/nginx/conf/nginx.conf
# Основная конфигурация
worker_processes auto;
events {
worker_connections 1024;
}
# HTTP блок для веб-интерфейса
http {
include mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name localhost;
# Статистика RTMP
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
# Плеер для тестирования
location /play {
alias /var/www/html;
}
}
}
# RTMP блок
rtmp {
server {
listen 1935;
chunk_size 4096;
# Приложение для стрима
application live {
live on;
# Разрешаем публикацию
allow publish all;
# Запись стрима
record all;
record_path /var/recordings;
record_suffix .flv;
# Ретрансляция на YouTube
push rtmp://a.rtmp.youtube.com/live2/YOUR_STREAM_KEY;
# Ретрансляция на Twitch
push rtmp://live-fra05.twitch.tv/app/YOUR_TWITCH_KEY;
# HLS настройки
hls on;
hls_path /var/hls;
hls_fragment 3;
hls_playlist_length 60;
}
}
}
Создаем необходимые директории:
sudo mkdir -p /var/recordings /var/hls /var/www/html
sudo chown -R www-data:www-data /var/recordings /var/hls /var/www/html
Практические кейсы использования
Сценарий | Преимущества | Недостатки | Рекомендации |
---|---|---|---|
Корпоративные трансляции | Полный контроль, безопасность | Требует администрирования | Используйте SSL, настройте авторизацию |
Геймерские стримы | Низкая задержка, кастомизация | Нужен быстрый интернет | Настройте множественную ретрансляцию |
Образовательные платформы | Запись лекций, интеграция | Масштабирование под нагрузкой | Используйте CDN для раздачи |
Расширенные настройки и автоматизация
Создаем скрипт для автоматического управления стримами:
#!/bin/bash
# stream-manager.sh
RTMP_URL="rtmp://localhost:1935/live"
RECORDINGS_DIR="/var/recordings"
HLS_DIR="/var/hls"
case "$1" in
start)
echo "Starting stream: $2"
ffmpeg -re -i "$2" -c copy -f flv "$RTMP_URL/$3"
;;
stop)
pkill -f "ffmpeg.*$RTMP_URL"
;;
cleanup)
find $RECORDINGS_DIR -name "*.flv" -mtime +7 -delete
find $HLS_DIR -name "*.ts" -mtime +1 -delete
;;
stats)
curl -s http://localhost/stat
;;
*)
echo "Usage: $0 {start|stop|cleanup|stats}"
exit 1
;;
esac
Настраиваем cron для автоматической очистки:
sudo crontab -e
# Очистка старых записей каждую ночь
0 2 * * * /usr/local/bin/stream-manager.sh cleanup
# Проверка статуса каждые 5 минут
*/5 * * * * /usr/local/bin/stream-manager.sh stats > /var/log/stream-stats.log
Мониторинг и отладка
Полезные команды для диагностики:
# Просмотр активных соединений
sudo netstat -tulnp | grep :1935
# Проверка логов
sudo tail -f /usr/local/nginx/logs/error.log
# Тестирование конфигурации
sudo /usr/local/nginx/sbin/nginx -t
# Проверка использования ресурсов
htop
iotop
Интеграция с другими инструментами
Nginx RTMP отлично работает в связке с:
- OBS Studio — для создания профессиональных стримов
- FFmpeg — для транскодирования и обработки видео
- Node Media Server — легковесная альтернатива на Node.js
- Docker — для контейнеризации и легкого развертывания
Пример Docker-контейнера:
# Dockerfile
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y \
nginx \
libnginx-mod-rtmp
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80 1935
CMD ["nginx", "-g", "daemon off;"]
Сравнение с альтернативами
Решение | Производительность | Простота настройки | Функциональность | Цена |
---|---|---|---|---|
Nginx RTMP | Высокая | Средняя | Богатая | Бесплатно |
Wowza | Очень высокая | Простая | Максимальная | Дорого |
Simple Relay Server | Средняя | Очень простая | Базовая | Бесплатно |
Безопасность и производительность
Несколько важных моментов для продакшена:
# Настройка firewall
sudo ufw allow 80/tcp
sudo ufw allow 1935/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# Ограничение подключений
iptables -A INPUT -p tcp --dport 1935 -m connlimit --connlimit-above 100 -j REJECT
# Настройка лимитов в nginx.conf
rtmp {
server {
listen 1935;
# Лимит полосы пропускания
max_connections 1000;
# Таймауты
timeout 60s;
ping 30s;
ping_timeout 30s;
}
}
Интересные факты и нестандартные применения
Nginx RTMP можно использовать не только для стриминга:
- Видеонаблюдение — агрегация потоков с IP-камер
- Телемедицина — трансляция операций в реальном времени
- IoT — передача видео с дронов и роботов
- Цифровые вывески — централизованное управление контентом
Можно настроить автоматическое создание превью:
# В конфигурации RTMP
exec_publish ffmpeg -i rtmp://localhost:1935/live/$name
-vf fps=1/10 -vframes 1 -f image2
/var/www/html/thumbs/$name.jpg;
Автоматизация и скрипты
Продвинутый мониторинг с уведомлениями:
#!/bin/bash
# stream-monitor.sh
WEBHOOK_URL="https://discord.com/api/webhooks/YOUR_WEBHOOK"
STATS_URL="http://localhost/stat"
check_stream() {
local stream_name="$1"
local status=$(curl -s $STATS_URL | grep -c "name>$stream_name")
if [ $status -eq 0 ]; then
curl -H "Content-Type: application/json" \
-d "{\"content\":\"⚠️ Stream $stream_name is offline!\"}" \
$WEBHOOK_URL
fi
}
# Проверяем критичные стримы
check_stream "main_stream"
check_stream "backup_stream"
Заключение и рекомендации
Nginx RTMP — это мощный инструмент для создания собственной стриминговой инфраструктуры. Он идеально подходит для проектов, где нужен полный контроль над потоком, низкая задержка и возможность кастомизации. Главные преимущества:
- Бесплатность и открытый исходный код
- Высокая производительность благодаря асинхронной архитектуре
- Гибкость настройки под любые задачи
- Интеграция с существующей инфраструктурой
Рекомендую использовать Nginx RTMP для корпоративных решений, образовательных платформ и проектов с высокими требованиями к безопасности. Для простых персональных стримов может быть избыточным — проще использовать готовые платформы типа YouTube или Twitch.
Для стабильной работы обязательно нужен качественный сервер с достаточными ресурсами CPU и пропускной способностью. В зависимости от нагрузки выбирайте между VPS для небольших проектов или выделенным сервером для высоконагруженных систем.
Полезные ссылки для дальнейшего изучения:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.