Введення
Наразі існує дуже багато платформ для онлайн-стримінгу відеоконтенту, такі як YouTube, Twitch, та інші. Для трансляції потокового відео через мережу інтернет вони використовують прокотол RTMP (Real-Time Messaging Protocol). Хоча ці платформи мають потужні можливості для проведення відеотрансляцій, в деяких випадках незалежність від стримінгової платформи та її правил є цілком доцільною.
У цій статті наведемо інструкцію з деплойменту RTMP сервіса на базі Nginx-RTMP, що дозволить приймати RTMP потік від комп’ютера стримера, та конвертувати його в сучасні формати HLS та DASH для перегляду у програмі-приймачі.
Передумови
Для реалізації RTMP сервісу, вам потрібно мати:
- Нову віртуальну машину або фізичний сервер на базі ОС Linux.
- Комп’ютер для ведення трансляції.
Для роботи поза локальною мережею, в глобальній мережі інтернет:
- Виділену IP адресу.
- Домен.
В інструкції буде використано VPS на базі Debian 11.
Робота з Nginx-RTMP
Встановлення
Перш за все, необхідно встановити пакети nginx
та libnginx-mod-rtmp
. Для цього потрібно виконати команди:
|
|
Налаштування RTMP
Після встановлення, потрібно сконфігурувати веб-сервер Nginx таким чином, щоб він прослуховував порт 1935 для отримання RTMP-потоку. Для цього потрібно відредагувати файл /etc/nginx/nginx.conf
:
sudo nano /etc/nginx/nginx.conf
В кінці файла, потрібно дописати конфігурацію RTMP сервера:
|
|
Тлумачення важливих аспектів цієї конфігурації:
listen 1935
- задає порт, на якому працює RTMP сервер.chunk_size 4096
- задає розмір блоку, по 4 Кб.allow publish [IP / Subnet]
- кожна строка вказує IP або підмережу, яким дозволено відсилати RTMP потік на сервер.deny publish all
- забороняє приймати RTMP потік від всіх інших адрес/мереж.application live
- конфігурація для перетворення RTMP в формати HLS та DASH, деhls_path
таdash_path
вказують шляхи до каталогів для розміщення плейлистів.live on
- дозволяє приймати дані відеопотоком.record off
- вимикає запис відеопотоку у файл на диску.
Налаштвання HLS, DASH
Далі, необхідно розгорнути віртуальний хост, що дозволить отримувати доступ до HLS або DASH потоків через HTTP/HTTPS протокол.
Спочатку треба створити дві директорії для зберігання фрагментів відеопотоку для HLS та DASH:
|
|
Та також встановити власника та права:
|
|
Для роботи віртуального хоста, потрібно створити новий конфігураційний файл (наприклад rtmp
) в каталозі /etc/nginx/sites-available
:
sudo nano /etc/nginx/sites-available/rtmp
Хост файл rtmp
складається з наступного:
|
|
Пояснення до цієї конфігурації:
- Замініть
rtmp.yourdomain.com
на свій домен. - Якщо ви хочете використовувати SSL, то також запишіть файли сертифікату та ключа за шляхами
/etc/ssl/yourdomain.crt
та/etc/ssl/yourdomain.key
. - Якщо ви не хочете використовувати SSL, то приберіть з файлу рядки що починаються з
ssl
таlisten 443 ssl
.
Для того щоб всі зроблені конфігурації вступили в дію, треба увімкнути віртуальний хост та перезавантажити Nginx:
|
|
Ведення трансляції в OBS Studio
Для ведення трансляції найкраще за все підходить програма OBS Studio.
Першочергово необхідно створити сцену, налаштувати звук, та зовнішній вигляд трансляції.
Для налаштування параметрів стримінгу, потрібно зайти в Налаштування та вибрати вкладку Stream. Там необхідно задати наступні параметри:
- Service: Custom
- Server: rtmp://rtmp.yourdomain.com/live (замість домену можна вказати IP, наприклад http://11.22.33.44/live)
- Stream Key: obs_stream
Приклад налаштувань:
Для запуску відеотрансляції, необхідно натиснути Start Streaming в головномі вікні програми:
Перегляд трансляції
Тепер трансляцію можна переглянути за допомогою будь-якої програми, що підтримує протоколи HLS та DASH. Найпростішим шляхом буде перегляд у програмі VLC, відкривши посилання на потік.
Для початку, розберемося як формується посилання на потоки в сконфігурованому сервісі:
- HLS:
{protocol}://{domain}/hls/{stream key}.m3u8
- DASH:
{protocol}://{domain}/dash/{stream key}.mpd
Наприлкад, якщо ви розгорнули сервіс за адресою rtmp.yourdomain.com
що використовує SSL, та в налаштуваннях OBS вказали ключ obs_stream
, то в такому випадку посилання будуть такими:
|
|
Для перегляду в VLC, потрібно натиснути Ctrl + N, або перейти в меню Media > Open Network Stream, вказати посилання на один із форматів, та натиснути Play.
Висновки
Таким чином можна створити свій сервіс для проведення трансляцій, що буде незалежним від популярних сервісів.
Переваги такого рішення:
- Приватність та повний контроль над інфраструктурою, гарантія що дані потоку не зберігаються.
- Не потрібно дотримуватися правил сервісу (наприклад заборону транслювати певний контент).
Але є і певні недоліки:
- Таке рішення вимагає певних ресурсів сервера.
- Власнику потрібно витрачати час та кошти на обслуговування та підтримку безпеки своєї інфраструктури.