Home » Настройка сервера потокового видео с Nginx RTMP на Ubuntu 24
Настройка сервера потокового видео с Nginx RTMP на Ubuntu 24

Настройка сервера потокового видео с 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 для небольших проектов или выделенным сервером для высоконагруженных систем.

Полезные ссылки для дальнейшего изучения:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

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

Leave a reply

Your email address will not be published. Required fields are marked