Использование протокола RTMP
RTMP (Real Time Messaging Protocol) — проприетарный протокол потоковой передачи данных на основе TCP. Использование TCP в качестве транспорта обеспечивает надежность доставки данных, а принцип передачи мультимедиа данных в виде фрагментов переменной длины (чанков, chunks) позволяет добиться низкой задержки.
Благодаря этим особенностям RTMP повсеместно используется для доставки live-видео на UGC-платформы. Фактически это отраслевой стандарт. Поддержка RTMP позволяет использовать Flussonic практически с любым монтажным оборудованием и open-source решениями.
Также поддерживается RTMPS — RTMP с шифрованием на основе TLS/SSL.
Реализация RTMP в Flussonic
Настройка приема и передачи потоков по RTMP в Flussonic выполняется стандартными способами. Есть некоторые особенности формирования URL потока, которые важно учитывать при использовании протокола RTMP. Ниже приведена общая информация об URL, а на соседних страницах в разделе вы найдете примеры конфигурации и примеры URL.
Также для использования RTMP и RTMPS необходимо задать порты во Flussonic.
- Проигрывание по RTMP
- Захват по RTMP.
- Прием публикации по RTMP. Пример настройки см. на странице Публикация из OBS Studio в Flussonic Media Server.
- Отправку по RTMP. Настройка осуществляется стандартным образом с учетом особенностей формирования URL, описанных ниже. Примеры настройки для популярных соцсетей приведены на странице Публикация в социальные сети.
Особенности формирования URL для RTMP
Особенностью протокола RTMP является отсутствие URL потока как такового. При подключении к серверу по RTMP клиент указывает имя сервера + имя приложения, а потом уже указывает, в какой поток публиковать или какой поток проигрывать.
Тем не менее, обычно для сокращенной записи имя приложения и имя потока склеивают. Например, пара из rtmp://rtmp.example.com/chats и chat-15 превращается в rtmp://rtmp.example.com/chats/chat-15 .
Стандартная практика при интерпретации RTMP адреса rtmp://rtmp.example.com/chats/chat-15 — разделить путь после имени сервера по первому слешу и взять первую часть имени в качестве приложения.
В Flussonic Media Server нет концепции приложений, они существуют только в протоколе RTMP и отсутствуют в других протоколах, поэтому при использовании протокола RTMP во Flussonic вы увидите только URL. Правила, по которым URL преобразуется в имя приложения и имя потока, описаны в соответствующих разделах.
Задание портов для RTMP и RTMPS
Порты для RTMP и RTMPS можно задать в разделе Listeners на вкладке Config -> Settings.
Для использования RTMPS необходимо получить SSL-сертификат.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the «Software»), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. —>
Создание RTMP/RTSP-publish

- В личном кабинете перейдите в раздел CDN .
- Перейдите на вкладку Трансляции и нажмите Создать ресурс .
- Выберите тип ресурса. Первый поток создается автоматически. Добавляйте или удаляйте потоки по выбору.
- Введите желаемое название потока или сформируйте его автоматически, нажав иконку Кубики .
- Выберите качество потока из выпадающего списка.
Внимание При способе публикации RTMP/RTSP-publish доступно создание не более 10 потоков.
Ресурс создан. Вы будете перенаправлены на вкладку Инструкция по настройке .
Для публикации выделяются два URL (основной и резервный) и имя потока с указанием авторизационного токена. Выберите конкретный способ публикации для формирования корректных ссылок.
Пример для RTMP-publish:
- URL primary: rtmp://a.r.cdnvideo.net/livemaster/
- URL backup: rtmp://b.r.cdnvideo.net/livemaster/`
- Streams: m97yox4iyw_0k1z5tsvxkb?auth=jkJt47ncuaFo78z1WXgAgJp
Резервный URL следует использовать только при наличии достаточной полосы пропускания. При создании нескольких потоков каждому из них будет выделен свой Stream .
Для публикации нескольких качеств в некоторых энкодерах (например, Wirecast) требуется вводить поле Streams по отдельности. Чтобы показать Streams по отдельности нажмите на Стрелочку вниз .
Если вы пользуетесь, например FMLE 3.2, скопируйте поле целиком.

Проверка трансляции
После получения ссылок для публикации и настройки энкодера мы рекомендуем проверить трансляцию на корректность работы. Для этого перейдите во вкладку Плеер . При правильной настройке энкодера в плеере отобразится запущенная трансляция.
Выберите комфортный способ просмотра: просмотр созданных потоков по отдельности или все вместе.
Используйте фрейм Код для встраивания для размещения плеера на вашем ресурсе.
Транскодирование
Данная услуга предназначена для компаний, у которых нет возможности отдать нам поток со следующими характеристиками, необходимыми для интернет-вещания:
- протокол: RTMP, RTSP, MPEG_TS,
- кодек для видео: h.264,
- кодек для аудио: AAC/mp3.
Если у вас нет возможности предоставить поток с указанными параметрами, а также для сокращения затрат на оборудование и программное обеспечение — используйте услугу транскодирования.
Для подключения услуги транскодирования на странице создания или редактирования RTMP-publish ресурса необходимо:
- Указать исходный поток, который вы будете публиковать.
- Выбрать подходящий пакет транскодирования (параметры пакета можно увидеть, нажав кнопку Подробности ).
- Нажать кнопку Создать ресурс или Сохранить .
Если вы заказываете услугу транскодирования, то для ресурса указывается только один входной поток.
DVR и запись потока
Для подключения услуги в рамках ресурса необходимо активировать переключатель DVR и запись потока .
Если вы хотите, чтобы записываемые потоки шли в рамках одного master плейлиста (например, если записываемые потоки различаются лишь качеством), активируйте опцию Использовать адаптивный playlist (smil) .
Для каждого из сгенерированных потоков можно выбрать свои настройки записи и DVR.
Настройки для потока
- Выберите тип трансляции:
- Кратковременная трансляция — запись идет не более 12 часов, целиком доступна после окончания. Подходит для записи единоразовых мероприятий (вебинаров, спортивных трансляций и т.д.).
- Постоянная трансляция — ведется запись исключительно определенного окна (последние N часов, где N — не больше 12). После окончания трансляции доступно только это окно. Подходит для вещания 24/7 (телеканалов, видеонаблюдения и т.д.).
- (опционально) Активируйте переключатель DVR .
- во время записи при включенном DVR плеер показывает Live-поток с возможностью перемотки до начала записи, при выключенном — оригинальный Live-поток.
- после окончания записи при включенном DVR плеер показывает запись, при выключенном — Live-поток.
Если запись активна, то в интерфейсе появляется возможность сбросить окно DVR (начать накапливать окно заново). Для этого необходимо нажать кнопку Сброс DVR .
Если на шаге 1 вы выбрали кратковременную трансляцию
- время и путь хранения записи;
- Timeout записи;
- способ начала записи.
Настройка Время хранения записи позволяет выбрать период времени после окончания записи, по истечении которого она удаляется, чтобы освободить место в хранилище.
Настройка Путь хранения записи позволяет указать любой путь в хранилище, по которому будет доступна сохраненная запись.
Настройка Timeout записи позволяет выбрать период времени при недоступности Live-потока, в течение которого запись не считается завершенной и продолжается, ожидая возобновления публикации потока.
Настройка Способ начала записи позволяет выбрать, когда именно начнется запись:
- По публикации — запись начнется с минимальной задержкой после начала публикации потока.
- По кнопке — запись начнется в тот момент, когда вы нажмете кнопку Начать запись (становится активной только после создания ресурса). Запись остановится либо после нажатия кнопки Остановить запись , либо после завершения публикации Live-потока.
- По расписанию — запись начнется и закончится в определенные моменты мирового времени (если поток будет опубликован).
Если на шаге 1 вы выбрали постоянную трансляцию
Примените следующие настройки:
- продолжительность DVR;
- Timeout DVR;
- cпособ начала записи.
Настройка Продолжительность DVR позволяет выбрать размер окна, которое будет записано и доступно для DVR. Можно выбрать подходящее значение из выпадающего списка или указать другое (в минутах).
Настройка Timeout DVR позволяет выбрать период времени при недоступности Live-потока, в течение которого запись не считается завершенной и продолжается, ожидая возобновления публикации потока.
Настройка Способ начала записи позволяет выбрать, когда именно начнется запись:
- По публикации — запись начнется с минимальной задержкой после начала публикации потока.
- По кнопке — запись начнется в тот момент, когда вы нажмете кнопку Включить DVR (становится активной только после создания ресурса). Запись остановится либо после нажатия кнопки Отключить DVR , либо после завершения публикации Live-потока.
Запускаем свой RTMP сервер для стриминга

Иногда YouTube или Twitch не подходят как стриминговая платформа — скажем, если вы пилите портал с вебинарами или контентом 18+, нарушаете авторские права или хотите максимально отгородить свою трансляцию от остального интернета. У них есть много альтернатив как в виде сервисов (те же минусы, недостаток контроля и непредсказуемая политика), так и в виде self-hosted решений. Проблема опенсорсных стриминговых проектов в том, что все они начинаются с крохотной связки из пары технологий, а затем отчаянно пытаются вырасти в сервис, добавляя сложные веб-интерфейсы, чаты, библиотеки стримов и в конечном счёте отдаляясь от исходной цели: дать миру инструмент, который по понятному мануалу позволит запустить свой сервер трансляций. Что с ним будет дальше, в какие системы будет встроена эта картинка — это только ваше личное дело, а самописный аналог твича с лагающими и отваливающимися сервисами и периодически валящимся билдом не нужен никому, кроме его разработчиков. Поэтому в этой статье мы разберём минимальную цепочку действий для запуска своего RTMP-сервера с плеером.
Структура

Здесь всё просто: за приём и кодировку потока из OBS отвечает RTMP модуль Nginx’a. Сконвертированный поток он выставляет наружу, где его подбирает HLS (HTTP Live Streaming) клиент в браузере и выдаёт уже готовую картинку в плеере.
Установка
При выборе сервера упор стоит обратить внимание на процессор. Я взял эпичный сервер с двумя ядрами и пробовал наращивать битрейт, чтобы определить граничные условия — на 11-12k нагрузка стала болтаться в районе 96-100%, так что для обработки действительно тяжёлого потока лучше взять мощности с запасом:

Нам понадобится Docker для установки контейнеризованного nginx-rtmp с FFmpeg и любой веб-сервер (включая тот же Nginx) для раздачи страницы с плеером. Я ставил на Ubuntu 20.04:
$ sudo apt-get update $ sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common \ nginx $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - $ sudo apt-key fingerprint 0EBFCD88 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" $ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
Запускаем контейнер c проброшенными портами:
docker run -d -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp
Затем в OBS на клиенте указываем наш сервер с произвольным ключом потока (ключ = индентификатор стрима):

Теперь можно запустить трансляцию и удостовериться что поток пошёл, например, в демке hls.js или в любом другом плеере HLS.
Осталось настроить сервер. В nginx.conf укажите путь до вашей страницы:
location / < root /var/www/; index index.htm index.html; autoindex on; >
sudo nginx -s reload
В index.html просто скопипастим код из примера hls.js:
--> var video = document.getElementById('video'); var videoSrc = 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8'; if (Hls.isSupported()) < var hls = new Hls(); hls.loadSource(videoSrc); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, function() < video.play(); >); > // hls.js is not supported on platforms that do not have Media Source // Extensions (MSE) enabled. // // When the browser has built-in HLS support (check using `canPlayType`), // we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video // element through the `src` property. This is using the built-in support // of the plain video element, without using hls.js. // // Note: it would be more normal to wait on the 'canplay' event below however // on Safari (where you are most likely to find built-in HLS support) the // video.src URL must be on the user-driven white-list before a 'canplay' // event will be emitted; the last video event that can be reliably // listened-for when the URL is not on the white-list is 'loadedmetadata'. else if (video.canPlayType('application/vnd.apple.mpegurl')) < video.src = videoSrc; video.addEventListener('loadedmetadata', function() < video.play(); >); >
Теперь на 8080 порту нашего сервера раздаётся жутковатый мультик про зайца:

Остаётся только изменить путь на http://server_ip:8080/live/stream-key.m3u8 и идти смотреть трансляцию!

Нагрузку в реальном времени можно проверять командой docker stats:

Заключение
Размещая стриминговый клиент на своём сервере важно помнить, что весь трафик со всех зрителей будет проходить прямо через него — значит, если одновременный онлайн у вас будет больше 1-2 человек, стоит изучать способы распределения нагрузки (ведь транскодирвоание ощутимо давит и на CPU). Для запуска полноценного кластера есть энтерпрайзное (но опенсорсное) решение — SRS aka Simple Realtime Server (GitHub, 10k звёзд, огромная вики, сложная архитектура). В него стоит вникать, если вам стримы нужны для решения настоящих задач, а не чтобы поиграться с приватным видеопотоком.
На правах рекламы
Серверы в аренду для любых задач — это про наши эпичные! Все серверы защищены от DDoS-атак, автоматическая установка множества ОС или использование своего образа ISO. Лучше один раз попробовать!
Настройка сервера видео-стриминга на Nginx-RTMP
Существует множество вариантов использования потокового видео. К примеру, популярные провайдеры сервисов типа Twitch часто применяются для обработки потоковой передачи и управления сообществом, а свободное программное обеспечение, такое как OBS Studio , широко используется для объединения наложений видео из нескольких источников потоков в режиме реального времени. Конечно, эти платформы очень мощные, однако в некоторых случаях у вас может возникнуть необходимость стримить независимо от других провайдеров.
В этом туториале вы узнаете, как настроить веб-сервер Nginx для размещения независимого видеопотока RTMP, который можно привязать к разным приложениям и просматривать его в них. RTMP ( Real-Time Messaging Protocol ) определяет основы большинства потоковых видео в сети. Также мы разберем, как размещать протоколы HLS и DASH, которые работают по той же технологии, но поддерживают более современные платформы.
Требования
Для выполнения этого мануала потребуется:
- Сервер (у нас Ubuntu) и пользователь sudo. Как настроить пользователя с этими привилегиями, можете узнать в этом мануале.
- Установленый Nginx (мы настроили свой согласно этому мануалу по установке Nginx в Ubuntu).
Мы будем использовать условный домен your_domain в URL-адресах и хостах. Замените его своим доменом или IP-адресом.
1: Установка и настройка Nginx-RTMP
Большинство современных потоковых инструментов поддерживают протокол RTMP, который определяет основные параметры сетевого видеопотока. Веб-сервер Nginx включает в себя модуль, который позволяет обеспечить поток RTMP с минимальной конфигурацией с выделенного URL-адреса (аналогично он по умолчанию предоставляет HTTP-доступ к веб-страницам). Модуля Nginx RTMP нет в Nginx, но в Ubuntu и большинстве других дистрибутивов Linux его можно установить как дополнительный пакет.
Чтобы обновить списки пакетов и установить модуль Nginx, выполните следующие команды как не-root пользователь:
sudo apt update
sudo apt install libnginx-mod-rtmp
Установка модуля не запустит стриминг автоматически. Чтобы запустить его, нам нужно будет добавить в файл Nginx блок конфигурации, который определяет, где и как будет доступен наш стрим.
С помощью nano или любого другого текстового редактора откройте конфигурационный файл Nginx /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
и добавьте следующий блок в конец файла:
. . . rtmp server listen 1935; chunk_size 4096; allow publish 127.0.0.1; deny publish all; application live live on; record off; > > >
- listen 1935 значит, что RTMP будет прослушивать соединения на порту 1935 (это стандарт).
- chunk_size 4096 означает, что RTMP будет отправлять данные блоками по 4 КБ (также стандарт).
- Благодаря строкам allow publish 127.0.0.1 и deny publish all сервер разрешает публиковать видео только на том же сервере, чтобы другие пользователи не запускали тут свои стримы.
- application live определяет application block, который будет доступен по URL-адресу /live.
- live on включает режим live, чтобы несколько пользователей могли одновременно подключаться к потоку (базовое условие для видеопотока).
- Record off отключает функцию записи Nginx-RTMP, поэтому по умолчанию все потоки не сохраняются отдельно на диск.
Сохраните и закройте файл. В nano для этого нажмите CTRL+X, затем Y и ENTER.
Это начало конфигурации RTMP. По умолчанию он прослушивает порт 1935, значит, теперь нам нужно открыть этот порт в брандмауэре. Если на сервере настроен ufw, выполните следующую команду:
sudo ufw allow 1935/tcp
Затем можно перезагрузить Nginx:
sudo systemctl reload nginx.service
Теперь RTMP-сервер работает. В следующем разделе мы рассмотрим потоковую передачу видео из локальных и удаленных источников на RTMP-сервер.
2: Отправка видео на сервер RTMP
Есть несколько способов отправить видео на RTMP-сервер. Один из вариантов — воспроизведение видеофайла непосредственно на сервере с помощью популярной аудио-видео утилиты командной строки ffmpeg. Если на сервере еще нет видеофайла, можно загрузить его с помощью инструмента для захвата видео с потоковых платформ (например YouTube) — youtube-dl. Для работы youtube-dl на сервере понадобится последняя версия Python.
Сначала установите Python и менеджер пакетов pip:
sudo apt install python3-pip
Затем с помощью pip установите youtube-dl:
sudo pip install youtube-dl
Теперь с помощью youtube-dl вы можете загружать видео с YouTube.
youtube-dl https://www.youtube.com/watch?v=iom_nhYQIYk -f mp4
Примечание: Иногда в работе возникает ошибка: ERROR: unable to download video data: HTTP Error 403: Forbidden. Это такой баг взаимодействия с YouTube через эту библиотеку. В этом случае вам нужно проверить правильность URL-адреса. Если URL правильный, снова запустите команду.
Вывод покажет, что youtube-dl объединяет видео- и аудиопотоки, которые он загружает в один файл:
[youtube] iom_nhYQIYk: Downloading webpage [download] Destination: Introducing App Platform by DigitalOcean-iom_nhYQIYk.mp4 [download] 100% of 7.90MiB in 01:39
Теперь в текущем каталоге есть необходимый файл. Установите ffmpeg для передачи стримов:
sudo apt install ffmpeg
Давайте с помощью ffmpeg отправим файл на RTMP-сервер:
ffmpeg -re -i «Introducing App Platform by DigitalOcean-iom_nhYQIYk.mp4» -c:v copy -c:a aac -ar 44100 -ac 1 -f flv rtmp://localhost/live/stream
Команда ffmpeg выполнит действия для подготовки видео к потоковому формату. Это не мануал по ffmpeg, поэтому мы не будем уделять ему много времени и разберем только несколько базовых параметров:
- -re значит, что ввод будет считываться с исходной частотой кадров.
- -i “Introducing App Platform by DigitalOcean-iom_nhYQIYk.mp4” указывает путь к входному файлу.
- -c:v имеет значение copy, а это значит, что при работе копируется нативный формат видео, полученного с YouTube.
- -c:a содержит параметры aac -ar 44100 -ac 1, чтобы пересэмплировать аудио в поддерживаемый RTMP формат. aac — широко поддерживаемый аудиокодек, 44 100 Гц — распространенная частота, -ac 1 указывает первую для совместимости версию спецификации AAC.
- -f flv упаковывает видео в контейнер формата flv для максимальной совместимости с RTMP.
Видео отправляется на rtmp://localhost/live/stream, потому что мы определили блок конфигурации live, а stream — это произвольно выбранный URL-адрес для этого видео.
Примечание: Ознакомьтесь с опциями ffmpeg в ffmprovisr , это поддерживаемый сообществом каталог примеров команд для ffmpeg. Также вы можете обратиться к официальным материалам .
ffmpeg выводит тайм-коды, пока транслируется видео:
frame= 127 fps= 25 q=-1.0 size= 405kB time=00:00:05.00 bitrate= 662.2kbits/s speed=frame= 140 fps= 25 q=-1.0 size= 628kB time=00:00:05.52 bitrate= 931.0kbits/s speed=frame= 153 fps= 25 q=-1.0 size= 866kB time=00:00:06.04 bitrate=1173.1kbits/s speed=
Это стандартный вывод ffmpeg. Эти данные были бы полезны при конвертировании видео в другой формат, потому что они позволяют понять, насколько эффективно ресемплируется видео. Но в данном случае можно просто убедиться, что видео воспроизводится стабильно. В данном случае получим точное значение fps=25.
Пока ffmpeg работает, можно подключиться к потоку RTMP с помощью видеоплеера. Посмотреть стрим можно по адресу rtmp://your_domain/live/stream в медиаплеере (если у вас есть локальная установка VLC, mpv или другой медиаплеер). Поток завершится, когда ffmpeg завершит воспроизведение видео. Если хотите зациклить видео, можно добавить опцию -stream_loop -1 в начало команды ffmpeg.
Примечание. Стримить можно и напрямую, например в Facebook Live с помощью ffmpeg без Nginx-RTMP. Для этого нужно заменить rtmp://localhost/live/stream в команде ffmpeg на rtmps://live-api-s. .facebook.com:443/rtmp/your-facebook-stream-key. YouTube использует URL-адреса типа rtmp://a.rtmp.youtube.com/live2. Другие провайдеры потокового вещания, которые могут потреблять потоки RTMP, должны вести себя аналогично.
Теперь, когда вы научились запускать видеострим из командной строки, давайте разберем, как транслировать видео из динамических источников с помощью OBS на рабочем столе.
3: Стриминг видео на сервер через OBS (опционально)
Потоковая передача через ffmpeg хорошо работает, если у вас есть готовое к воспроизведению видео, но прямая трансляция может быть динамичнее. Самым популярным программным обеспечением для прямых трансляций является OBS (Open Broadcaster Software) — свободное, открытое и очень мощное.
OBS — это настольное приложение, которое будет подключаться к серверу с локального компьютера.
После установки OBS требует настройки: вам нужно выбрать окна рабочего стола и источники звука, которые будут добавлены в поток, а затем добавить учетные данные для службы потоковой передачи. В этом туториале мы не будем рассматривать конфигурацию потоковой передачи, поскольку она зависит от многих факторов, а получить рабочую демонстрацию можно и со стандартными настройками (можно просто стримить свой рабочий стол, например). Чтобы установить учетные данные, откройте меню настроек OBS, перейдите к параметру Stream и введите следующие параметры:
Streaming Service: Custom Server: rtmp://your_domain/live Play Path/Stream Key: obs_stream
obs_stream — произвольно выбранный путь, в этом случае видео будет доступно по адресу rtmp://your_domain/live/obs_stream. Включать аутентификацию не нужно, но нужно добавить дополнительную запись в белый список IP-адресов, который мы настраивали вначале.
На сервере откройте основной файл конфигурации Nginx (/etc/nginx/nginx.conf) и добавьте запись allow publish для локального IP-адреса. Если вы не знаете свой локальный IP-адрес, можете перейти на сайт What’s my IP , который подскажет, откуда вы зашли на сервер.
sudo nano /etc/nginx/nginx.conf
. . . allow publish 127.0.0.1; allow publish your_local_ip_address; deny publish all; . . .
Сохраните и закройте файл, затем перезагрузите Nginx:
sudo systemctl reload nginx.service
Теперь можно закрыть меню настроек OBS и нажать Start Streaming в главном интерфейсе! Попробуйте посмотреть стрим в медиаплеере по адресу rtmp://your_domain/live/obs_stream.
Итак, мы разобрали основы работы с потоковым видео в действии. Далее мы добавим другие функции на сервер, чтобы подготовить его к продакшену еще лучше.
4: Настройка мониторинга (опционально)
Давайте теперь включим страницу статистики RTMP. Nginx позволяет добавлять конфигурации для каждого сайта в отдельные файлы в подкаталоге sites-available/, потому нам не придется добавлять новые конфигурации в основной файл nginx.conf. Создадим файл под названием rtmp:
sudo nano /etc/nginx/sites-available/rtmp
Добавьте следующее содержимое:
server listen 8080; server_name localhost; # rtmp stat location /stat rtmp_stat all; rtmp_stat_stylesheet stat.xsl; > location /stat.xsl root /var/www/html/rtmp; > # rtmp control location /control rtmp_control all; > >
Сохраните и закройте файл. Файл stat.xsl из этого блока конфигурации используется для вывода страницы статистики RTMP в браузере. Его предоставляет ранее установленная библиотека libnginx-mod-rtmp, но по умолчанию он заархивирован. Поэтому нужно его разархивировать и поместить в каталог /var/www/html/rtmp. Обратите внимание, найти дополнительную информацию о любом из этих параметров можно в материалах Nginx-RTMP .
Создайте каталог /var/www/html/rtmp, а затем распакуйте файл stat.xsl.gz с помощью следующих команд:
sudo mkdir /var/www/html/rtmp
sudo cp /usr/share/doc/libnginx-mod-rtmp/examples/stat.xsl /var/www/html/rtmp/stat.xsl
Чтобы получить доступ к странице статистики, нужно открыть другой порт в брандмауэре. Директива listen настроена на порт 8080, поэтому нам нужно добавить правило для доступа к Nginx через этот порт. Скорее всего, вы не захотите, чтобы кто-то другой мог получить доступ к странице статистики, поэтому лучше разрешить ее только для вашего IP. Выполните следующую команду:
sudo ufw allow from your_ip_address to any port http-alt
Далее нужно активировать эту конфигурацию. В Nginx для этого принято создавать симлинки (как ярлыки) из sites-available/ в sites-enabled/. Создадим такой симлинк:
sudo ln -s /etc/nginx/sites-available/rtmp /etc/nginx/sites-enabled/rtmp
Нужно перезагрузить Nginx, чтобы обработать изменения:
sudo systemctl reload nginx.service
Для просмотра страницы статистики RTMP в браузере перейдите по адресу http://your_domain:8080/stat. Посетите страницу статистики во время потоковой передачи видео и проследите за статистикой трансляции.
Итак, мы разобрали, как контролировать видеопоток и передавать его сторонним провайдерам. В последнем разделе вы узнаете, как запустить его непосредственно в браузере без сторонних платформ потокового вещания или отдельных приложений медиаплеера.
5: Создание современных потоков для браузера (опционально)
Мы также можем добавить поддержку новых потоковых протоколов. Есть два протокола для создания видеопотоков на основе HTTP: HLS от Apple и DASH от MPEG. У каждого есть свои преимущества и недостатки, потому рекомендуем включить поддержку обоих.
Модуль Nginx-RTMP поддерживает оба стандарта. Чтобы добавить поддержку HLS и DASH на сервер, необходимо изменить rtmp block в файле nginx.conf. Откройте файл /etc/nginx/nginx.conf и добавьте такие директивы:
sudo nano /etc/nginx/nginx.conf
. . . rtmp server . . . application live live on; record off; hls on; hls_path /var/www/html/stream/hls; hls_fragment 3; hls_playlist_length 60; dash on; dash_path /var/www/html/stream/dash; > > > . . .
Сохраните и закройте файл. Затем добавьте в конец sites-available/rtmp следующее:
sudo nano /etc/nginx/sites-available/rtmp
. . . server listen 8088; location / add_header Access-Control-Allow-Origin *; root /var/www/html/stream; > > types application/dash+xml mpd; >
Примечание. Заголовок Access-Control-Allow-Origin * включает CORS ( Cross-Origin Resource Sharing ), который по умолчанию отключен. Это сообщает браузерам, которые получают доступ к данным с сервера, что сервер может загружать ресурсы с других портов или доменов. CORS необходим для максимальной совместимости с клиентами HLS и DASH , а также для общего переключения конфигурации во многих других веб-развертываниях.
Сохраните и закройте файл. Обратите внимание, что в этом мануале мы используем порт 8088, чтобы избежать конфликтов с запущенными на порту 80 или 443 службами. Откроем этот порт в брандмауэре:
sudo ufw allow 8088/tcp
Чтобы Nginx мог генерировать необходимые файлы для HLS и DASH, создайте каталог stream в root, как указано в нашей конфигурации:
sudo mkdir /var/www/html/stream
sudo systemctl reload nginx
Теперь поток HLS доступен по адресу http://your_domain:8088/hls/stream.m3u8 , а поток DASH — по адресу http://your_domain:8088/dash/stream.mpd. Эти конечные точки будут генерировать все необходимые метаданные поверх видеопотока RTMP для поддержки современных API.
Подводим итоги
Все параметры конфигурации в этом туториале есть на странице Nginx RTMP Wiki . Модули Nginx обычно имеют общий синтаксис и предоставляют большой набор параметров конфигурации, чтобы изменить настройки. Рекомендуем ознакомиться с их материалами.
Почти все стриминговые видео в сети реализованы на основе RTMP, HLS и DASH и используют подход, который представлен в этом туториале. Вы можете настроить стриминг через другие сервисы или предоставлять его любым другим способом.