Как настроить сервер NGINX RTMP для потоковой передачи

Ваша прямая трансляция постоянно вылетает? Если да, вам нужно найти надежный способ размещения вашей трансляции. Но если у вас нет возможности позволить себе дорогие варианты, не беспокойтесь! NGINX RTMP придет на выручку. NGINX RTMP – надежный модуль с открытым исходным кодом, так что вы знаете, что это значит — это бесплатно!

В этом руководстве вы узнаете, как настроить сервер NGINX RTMP, чтобы создать надежную прямую трансляцию на вашем веб-сайте.

Готовы? Читайте дальше и начнем настройку прямой трансляции!

Предварительные требования

Этот учебник будет практическим демонстрационным материалом. Если вы хотите следовать за мной, убедитесь, что у вас есть следующее:

  • A Linux server – This demo uses Ubuntu 20.04 LTS, but you can use any other Linux distribution with NGINX.
  • NGINX установлен на сервере Linux.
  • A non-root user with sudo privileges.
  • Минимальные ресурсы для запуска сервера прямой трансляции – 2 ГБ ОЗУ, 2 ядра CPU и 20 ГБ HDD.

Эти значения предложены только в качестве рекомендаций. Точные значения зависят от ваших реальных потребностей в трафике. Чем больше у вас трафика, тем мощнее серверы вам понадобятся для размещения и передачи прямого видео. В разработочной среде сервер NGINX RTMP с 2 ядрами и 2 ГБ ОЗУ достаточен для тестирования.

Настройка сервера RTMP

Теперь, когда предварительные требования учтены, вы можете перейти к установке и настройке вашего сервера RTMP. Сначала установите модуль NGINX, чтобы превратить ваш сервер NGINX в сервер RTMP, затем настройте файл конфигурации NGINX для включения прямых трансляций для пользователей.

1. Откройте терминал и выполните команду apt update, чтобы обновить все ваши пакеты. Эта команда синхронизирует вашу базу данных пакетов с последней базой данных от Ubuntu.

sudo apt update -y
Updating all your packages

2. Затем выполните следующую команду, чтобы установить сервер RTMP на вашем сервере Linux.

Модуль libnginx-mod-rtmp – это модуль NGINX, превращающий ваш сервер NGINX в сервер RTMP. Этот модуль позволяет NGINX взаимодействовать с проигрывателем Adobe Flash, чтобы вы могли транслировать свои видео или аудио в режиме реального времени, и официально поддерживается командой разработчиков.

sudo apt install libnginx-mod-rtmp -y
installing an RTMP server

3. Откройте файл /etc/nginx/nginx.conf в вашем любимом редакторе, чтобы настроить вашу программу RTMP в режиме реального времени. Файл nginx.conf – это файл конфигурации NGINX, содержащий несколько директив или блоков для определения поведения службы NGINX.

4. Наконец, заполните файл nginx.conf следующим кодом, сохраните изменения и закройте редактор.

Приведенный ниже код указывает NGINX действовать как сервер RTMP и включает прямые трансляции для ваших пользователей.

# Этот блок кода указывает NGINX действовать как сервер RTMP. 
rtmp {
		server {
		# Устанавливает порт, на котором сервер будет слушать.
    listen 1935;
				# Размер каждого блока данных, который будет отправлен.
				# Flash Player зависнет, если блок слишком мал, 
				# что может вызвать условие недостатка буфера.
        chunk_size 4096;
				# IP-адресам разрешено публиковать контент на сервере.
				# Разрешить публикацию только для localhost на NGINX RTMP.
				allow publish 127.0.0.1;
				# Запретить публикацию для всех остальных.
				deny publish all;
				# Определяет именованное приложение с именем "live"
        application live {
				# Говорит NGINX включить прямые трансляции для ваших пользователей.
						live on;
				# Эта строка указывает NGINX отключить запись. Если этой строки нет, 
				# NGINX будет продолжать записывать и сохранять ваш поток бессрочно на диск.
						record off;
				}
		}
}

Обеспечение безопасности сети установкой брандмауэра

Вы уже настроили свой сервер NGINX RTMP, но вам нужно обеспечить безопасность вашей сети и контролировать поток трафика. Как? Установкой брандмауэра, Uncomplicated Firewall (UFW), который является стандартным брандмауэром в Ubuntu.

Если вы поместили ваш сервер NGINX RTMP за брандмауэр, вам нужно разрешить открытие порта сервера NGINX RTMP. Поскольку вы сконфигурировали ваш сервер NGINX RTMP на прослушивание порта 1935, вы разрешите этот порт через ваш брандмауэр.

1. Выполните следующую команду, чтобы добавить правило брандмауэра, открывающее порт 1935 на вашем брандмауэре. Это правило брандмауэра позволяет вашему порту сервера NGINX RTMP 1935 быть доступным для всех входящих и исходящих запросов.

sudo ufw allow 1935/tcp
Opening Port 1935 on your firewall

2. Затем выполните следующую команду, чтобы отключить и снова включить ваш брандмауэр. Эта команда в основном перезапускает брандмауэр для любых изменений, чтобы они вступили в силу.

sudo ufw disable && sudo ufw enable

3. Наконец, выполните команду ниже, чтобы проверить состояние вашего брандмауэра и убедиться, что порт 1935 доступен для всех IP-адресов (Везде).

sudo ufw status
Checking if Port 1935 is Accessible from Anywhere

Потоковое видео с использованием FFmpeg

Ваш сервер NFINX RTMP теперь запущен, так что пришло время использовать FFmpeg, чтобы создать пример видео и транслировать его через ваш сервер NGINX RTMP. FFmpeg – это полное решение для записи, преобразования и потоковой передачи аудио и видео во многих различных приложениях, таких как VLC, OMXPlayer, VobSub и так далее.

Вы будете тестировать потоковое видео на вашем сервере, и вы можете использовать любое видео малого размера для потоковой передачи.

1. Выполните команду apt install ниже, чтобы установить необходимые зависимости для правильной работы FFmpeg.

Ниже приведена команда, которая устанавливает следующее:

  • libpcre3 – библиотека регулярных выражений, используемая в наборе инструментов ffmpeg для разбора и компиляции регулярных выражений.
  • libpcre3-dev – Этот пакет содержит заголовочные файлы для разработки пакета libpcre3.
  • libssl-dev – Криптографическая библиотека OpenSSL, используемая для создания SSL/TLS-соединений в вашем сервере RTMP.
  • zlib1g-dev: Библиотека zlib – библиотека сжатия и распаковки, которая ускоряет передачу аудио- и видеофайлов по Интернету.
sudo apt install -y libpcre3 libpcre3-dev libssl-dev zlib1g-dev
Installing Required Dependencies

2. Затем выполните следующую команду для установки ffmpeg на вашем сервере.

 sudo apt install ffmpeg -y 
Installing FFmpeg

3. Наконец, выполните команду ffmpeg, чтобы выполнить следующее и создать новый прямой эфир:

  • Чтение входа (re) из исходного файла (i) с оригинальной частотой кадров. Обязательно замените video.mp4 на путь и имя вашего видеофайла.
  • Копирование формата видео буквально (c:v copy) и кодирование аудио с кодеком AAC (c:a aac).
  • Установите частоту дискретизации аудио на 44100 Гц (ar 44100). Если частота дискретизации вашего видео меньше этого значения (44100 Гц), FFmpeg выполняет интерполяцию, чтобы увеличить частоту дискретизации.
  • Установите аудиоканалы на один канал (моно) (ac 1), и формат видео, который будет передавать FFmpeg (-f flv).
  • Укажите вашу программу для прямой трансляции RTMP (rtmp://localhost/live/streamname.flv), которую вы настроили в разделе “Настройка сервера RTMP” (шаг четыре). Вы можете изменить streamname.flv на любое имя, которое вам нравится.
ffmpeg -re -i "video.mp4" -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://139.180.203.6:1935/live/streamname.flv 

Как видите ниже, команда ffmpeg выводит количество кадров в секунду, обнаруженных им, битрейт и частоту кадров нового потока прямой трансляции RTMP.

Viewing the RTMP Live Stream Data

Заключение

В этом руководстве вы узнали, как настроить сервер RTMP NGINX и включить прямые трансляции на вашем сервере, изменяя файл конфигурации NGINX. Вы также кратко ознакомились с настройкой прямой трансляции видео с помощью инструмента FFmpeg через ваш сервер RTMP NGINX.

Вы только что поняли, что настройка прямой трансляции не обязательно должна обойтись вам каждым пенни. На этом этапе, почему бы не встроить ваш поток на вашу веб-страницу, используя элемент HTML5 <video>? Или настроить OBS Studio для вашего потока RTMP?

Source:
https://adamtheautomator.com/nginx-rtmp/