Windows local rtmp server

Инструкция как создать свой собственный сервер для зрителей с RTMP или SRT потоком и плеером на своем сайте?

Давно мечтали о своем собственном сервере онлайн трансляций и своем собственном плеере на своем собственном сайте, куда приходят ваши зрители и спокойно смотрят ваш стрим?

Давно мечтали о своем собственном сервере онлайн трансляций и своем собственном плеере на своем собственном сайте, куда приходят ваши зрители и спокойно смотрят ваш стрим?
Пора уже начинать делать его.
В видосе пошаговая инструкция как с нуля сделать стрим по RTMP или SRT на свой собственный сайт — от момента генерации контента до момента физического просмотра зрителем через ваш плеер на вашем сайте.
Изучайте, смотрите, творите, создавайте свои сервера для ваших проектов!


Спецссылка на регистрацию в immerscloud: https://immers.cloud/signup/r/20200427-8011291-126/

КОМАНДЫ ДЛЯ НАКАТЫВАНИЯ СЕРВЕРА

Имя пользователя по умолчанию — ubuntu

Копируйте команды по одной, вставляйте кликнув ПРАВОЙ кнопкой мыши в консоль Putty.
После каждой команды жмакаем ENTER.

echo «deb http://nimblestreamer.com/ubuntu bionic/» | sudo tee -a /etc/apt/sources.list

sudo apt-get update

sudo apt-get install nimble

sudo apt-get install nimble-srt

ВАШ ЛОГИН В ПАНЕЛИ НИМБЛА

ВАШ ПАРОЛЬ В ПАНЕЛИ НИМБЛА (будет не видно как он пишется, но он пишется, потом ENTER жмакайте)

Запускаем свой RTMP сервер для стриминга

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

Читайте также:  Windows form с нуля

Структура

Здесь всё просто: за приём и кодировку потока из OBS отвечает RTMP модуль Nginx’a. Сконвертированный поток он выставляет наружу, где его подбирает HLS (HTTP Live Streaming) клиент в браузере и выдаёт уже готовую картинку в плеере.

Установка

При выборе сервера упор стоит обратить внимание на процессор. Я взял эпичный сервер с двумя ядрами и пробовал наращивать битрейт, чтобы определить граничные условия — на 11-12k нагрузка стала болтаться в районе 96-100%, так что для обработки действительно тяжёлого потока лучше взять мощности с запасом:

Нам понадобится Docker для установки контейнеризованного nginx-rtmp с FFmpeg и любой веб-сервер (включая тот же Nginx) для раздачи страницы с плеером. Я ставил на Ubuntu 20.04:

Запускаем контейнер c проброшенными портами:

Затем в OBS на клиенте указываем наш сервер с произвольным ключом потока (ключ = индентификатор стрима):

Теперь можно запустить трансляцию и удостовериться что поток пошёл, например, в демке hls.js или в любом другом плеере HLS.

Осталось настроить сервер. В nginx.conf укажите путь до вашей страницы:

В index.html просто скопипастим код из примера hls.js:

Теперь на 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: несколько готовых рецептов

Недавно я наткнулся на топик «Сервер онлайн-вещаний на базе nginx» о замечательном модуле Романа Арутюняна (@rarutyunyan) для nginx: nginx-rtmp-module. Модуль очень прост в настройке и позволяет на основе nginx создать сервер публикации видеозаписей и живого вещания.

Про сам модуль можно прочитать на его странице на GitHub, я же хочу привести несколько простых примеров использования. Надеюсь, топик поможет новичкам в видеоделах (таким как я).

Читайте также:  Portable windows usb rus

Коротко об RTMP

RTMP (Real Time Messaging Protocol) — проприетарный протокол вещания от Adobe. В качестве транспорта по умолчанию используется TCP (порт 1935). Также можно инкапсулировать RTMP в HTTP (RTMPT). Клиент RTMP — это в первую очередь Adobe Flash Player.
Кодек видео — H.264, кодек аудио AAC, nellymoser или MP3, контейнеры MP4 или FLV.

Публикация видеозаписи

Иначе говоря, видео по запросу (VOD). Просто добавьте в nginx.conf в секцию rtmp < server <… >>.

(Прим.: конечно, секцию не обязательно называть vod)
Теперь можно положить в папку /var/videos видеофайл в правильном формате и «скормить» плееру источник, например rtmp://server/vod/file.flv. Насколько я понял, MP4 нативно поддерживает перемотку видео, а FLV придется индексировать отдельно.

Все приведенные далее примеры будут уже про «живую» трансляцию с помощью ffmpeg под Windows. Впрочем, эта информация будет полезна и для пользователей Linux.

Онлайн-трансляция

Мы можем отправить поток видео и аудио на сервер используя все тот же протокол RTMP для публикации. А наши клиенты смогут трансляцию смотреть. Для этого на сервере надо добавить секцию:

Рекомендую сразу закрыть доступ на публикацию всем, кроме доверенных IP, как показано в примере.

На машине, с которой мы будем вещать, для начала надо получить список устройств DirectShow. Пуск — Выполнить — cmd, переходим в папку ffmpeg/bin и запускаем:

Если в названии вашего источника есть русские буквы, то они могут отобразиться кракозябрами. ТруЪ админы заюзают iconv, а простые парни вроде меня раскодируют бяку на сайте Лебедева. FFmpeg’у нужно скормить читабельную надпись.

Теперь, зная имя видео и аудио источника, можно захватить его при помощи ffmpeg и отправить на сервер.

Веб-камера

Как минимум нужно указать источник видео, кодек и сервер:

Вместо «Webcam C170» нужно подставить название вашей камеры из списка.
Ключ -an говорит о том, что мы не передаем аудио поток. Если аудио поток нужен, то строка запуска будет выглядеть примерно так:

Здесь мы использует кодек libfaac, частота дискретизации 44100, 2 канала (стерео). Можно вместо AAC использовать MP3 (кодек libmp3lame).

Аналоговая камера

Если у вашей камеры аналоговый выход, то ее можно подключить к компьютеру с помощью устройства захвата. Я использую дешевую PAL камеру и USB плату захвата с Dealextreme.

Захват экрана

Тут есть два варианта: установить FFSplit или использовать screen-capture-recorder с FFmpeg.
FFSplit использовать проще, т.к. у него есть удобный GUI, но он не работает под XP/2003.

Если вы решили выбрать второй способ, то строка запуска FFmpeg будет выглядеть примерно так:

Аудио-поток можно захватить с virtual-audio-capturer.

Читайте также:  Windows 10 настройка цветовой гаммы


Пример захвата экрана в приложении

Ретрансляция

Естественно, вы можете ретранслировать видео или аудио файл (или поток) FFmpeg на сервер. В примере ниже мы передаем MJPEG видео с удаленной камеры:

Но для таких целей более разумно использовать опцию push на самом RTMP-сервере, чтобы исключить промежуточное звено и вытягивать поток на самом сервере.


Какая-то веб-камера в Японии

Тюнинг, решение проблем

-preset имя У H.264 есть несколько наборов настроек соотношения компрессия/скорость: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow. Поэтому если вы хотите повысить производительность, стоит использовать:

-crf число непосредственно влияет на битрейт и качество. Принимает значения от 0 до 51 — чем больше, тем ниже качество картинки. По умолчанию 23, 18 — losless качество. Битрейт примерно удваивается при уменьшении CRF на 6.

-r число задает входной и выходной FPS. Для источников, с которых вы захватываете картинку, можно установить вместо -r -re, чтобы использовать «родной» FPS.

-rtbufsize число размер буфера реального времени. Если у вас постоянно появляются сообщения о переполнении буфера и отбрасывании кадров, вы можете поставить большой буфер (например, 100000k), однако это может увеличить задержку передачи.

-pix_fmt задает цветовую модель. Если у вас вместо картинки показывается черный квадрат, а звук работает, попробуйте поставить yuv420p или yuv422p.

-s ширинаxвысота входной и выходной размер картинки.

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

-keyint_min число минимальное число кадров между ключевыми.

-vf «crop=w:h:x:y» обрезать видео

-tune zerolatency «волшебная» опция уменьшения задержки трансляции. Что она конкретно делает я так и не нашел (-:

-analyzeduration 0 отключает анализ длительности, что помогает снизить задержку трансляции

Помимо рассмотренных выше параметров аудио вам может понадобиться -acodec copy в том случае, если ваш аудио поток не требует дополнительной перекодировки в MP3/AAC.

Пример: вещаем с веб-камеры с низкой задержкой без звука, рисуем в верхней части картинки текущее время

Плеер на сайте

Тут все просто. Поставьте на свой сайт один из популярных плееров, например Flowplayer или JW Player.

Пример подключения JW Player вы можете посмотреть на странице демо трансляции.

Что дальше?

С помощью модуля rtmp можно создать не только видеотрансляцию, но и видеочат, интернет-радио, простую платформу для вебинаров. Дерзайте!

Я рассмотрел лишь базовую функциональность nginx-rtmp-module и ffmpeg. Возможности у них гораздо шире, поэтому обратите внимание на документацию:
Блог nginx-rtmp-module
Wiki nginx-rtmp-module
Документация FFmpeg
Streaming Guide
x264 Encoding Guide
Filtering Guide

Оцените статью