Как сделать rtmp сервер на windows

Обновлено: 08.07.2024

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

Intel Dual-Core Processor J1800

Компьютер должен быть подключен к сети в которой есть работающий DHCP сервер(или если такого сервера нет, то нужно настроить сетевой адрес, прописать маску и шлюз), сеть к которой подключен компьютер имеет доступ в Интернет

1) Устанавливаем OS Ubuntu на компьютер

2) Установка необходимых пакетов для Nginx

Предполагается что ранее ngnix на компьютер не устанавливался, иначе его нужно удалить
Устанавливаем пакеты

3) Скачиваем Nginx и Nginx-RTMP

Создаем папку куда будут загружаться пакеты и переходим в нее

Скачиваем необходимые пакеты

Теперь необходимо распаковать
Если у вас установлен unzip, надо его установить командой

4) Устанавливаем Nginx

Переходим в папку с разархивированным Nginx

добавляем к Nginx модуль RTMP

Компилируем и устанавливаем

5) Устанавливаем скрипты инициализации Nginx

Последняя команда добавляет nginx в автозапуск

И выключить сервис

7) Настройка Nginx

Редактируем файл конфигурации

Открывшейся файл выглядит примерно так

8) Установка FFmpeg и проверка его работы

Для того, чтобы мы смогли конвертировать поток rtsp в fvl, понадобится ffmpeg.
Подключаем репозитории FFmpeg и ставим его:

9) Пробуем перезапустить сервер, после перезагрузки все должно работать

Если ошибок не было и все сделали правильно, то открыв в VLC поток

rtmp://ip_adress_servera/cam1/stream
Мы увидим картинку с нашей ip камеры

10) Загрузка процессора компьютера

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

11) Если нужно показывать картинку с нескольких камер, то
открываем файл

В корень конфигурационного файла добавляем

теперь в конец файла нужно добавить,

Если нужно сделать вещание на сайт с помощью видеосервера nginx, то для этого нужно
установить на вашем сайте плеер, например, jw player.
Как это сделать посмотрите открыв ссылку ниже.


После этого вставьте код на страницу вашего сайта.
Пример нашего кода ниже.


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

Структура


Установка

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


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

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

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


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

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

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

Теперь на 8080 порту нашего сервера раздаётся жутковатый мультик про зайца:



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


Заключение

Размещая стриминговый клиент на своём сервере важно помнить, что весь трафик со всех зрителей будет проходить прямо через него — значит, если одновременный онлайн у вас будет больше 1-2 человек, стоит изучать способы распределения нагрузки (ведь транскодирвоание ощутимо давит и на CPU). Для запуска полноценного кластера есть энтерпрайзное (но опенсорсное) решение — SRS aka Simple Realtime Server (GitHub, 10k звёзд, огромная вики, сложная архитектура). В него стоит вникать, если вам стримы нужны для решения настоящих задач, а не чтобы поиграться с приватным видеопотоком.

На правах рекламы

Серверы в аренду для любых задач — это про наши эпичные! Все серверы защищены от DDoS-атак, автоматическая установка множества ОС или использование своего образа ISO. Лучше один раз попробовать!

Возникла необходимость организовать трансляцию экрана моего ПК на старенький LG Smart TV (2008 года выпуска). В магазине приложений LG SmartWorld ничего подходящего не нашлось. Можно было бы решить эту задачу с помощью HDMI кабеля или технологий Miracast / Intel WiDi, которые поддерживается телевизором. Но первый вариант не подходит из-за большого расстояния между конечными устройствами, а для второго потребуются дополнительные вложения, чтобы добавить совместимость с соответствующей технологией на компьютере. Из каналов связи остается только проводное Ethernet соединение, которое было проложено в квартире еще на этапе ремонта. Ну а картинку будем передавать через DLNA, благо телевизор этот стандарт так же поддерживает.

Потратив достаточное количество времени, действительно полезной информации удалось найти совсем крохи. Просмотр медиа-контента через DLNA в виде отдельных файлов - проще простого. Куча разных серверов умеют это делать. А вот работать с потоковым видео способны не все. В итоге решил собрать в одном месте всю информацию, которую удалось отыскать. Стоит уточнить, что речь идет про операционные системы семейства Windows. Для Linux можете обратить внимание вот на этот проект (если знаете что-то еще - пишите в комментариях).

1. TVersity Screen Server

2. OBS Studio + NGINX with RTMP + Serviio

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

Для начала требуется скачать сборку NGINX с модулем RTMP под Win32 (тыц). Распаковываем архив в любой каталог (главное, чтобы в пути не было кириллицы) и вносим правки в файл conf/nginx.conf:

После запускаем nginx.exe (лучше из консоли, чтобы видеть причины возможных ошибок).

Теперь скачиваем и устанавливаем OBS Studio. В настройках выставляем все так, как на скриншотах (нажмите, чтобы увеличить).

Не забываем добавить источник "Захват экрана" в текущую сцену.

Последним этапом будет конфигурация и запуск Serviio Media Streaming Server. Переходим в консоль управления и добавляем в медиатеку онлайн источников ссылку на наш RTMP поток. Здесь же можно протестировать работоспособность с помощью соответствующей кнопки.


После этого можно закрыть окно настроек и запустить трансляцию в OBS Studio.

В самом же телевизоре открываем меню SMART и запускаем системное приложение SmartShare. Наша DLNA сервер должен появиться на вкладке "Подключенное устройство".

Стоит заметить, что любой способ трансляции через DLNA имеет существенный недостаток в виде задержки потока на несколько секунд. Так что, например, поиграть в компьютерные игры - не получится.

Внимание! Все действия, описанные выше, вы выполняете на свой страх и риск. Автор не несет никакой ответственности за любой вред, причиненный пользователю или третьим лицам в результате использования материалов, программного обеспечения и другой информации, размещенной на данной странице. Полезно? Поддержите! Это мотивирует автора к дальнейшим публикациям.

DIY как хобби - разработка и ремонт различной электроники, программирование под WEB, Desktop и микроконтроллеры в свободное от работы время. На данный момент увлёкся системами умного дома, в частности Home Assistant и ZigBee устройствами. Перейти в профиль пользователя Kasito

Для организации онлайн трансляций в реальном режиме времени, видео по запросу (vod), а также для осуществления записи видео-потоков можно использовать nginx вместе с модулем nginx-rtmp-module.

Медиа серверы

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

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

Ngnix-rtmp

Таким образом, с помощью Ngnix-rtmp (веб сервер Ngnix + модуль Ngnix-rtmp-module), можно организовать вещание по RTMP и HLS на устройства пользователей. Сводную таблицу протоколов и устройств, которые их поддерживают, можно посмотреть в статье Медиа серверы (Wowza, Erlyvideo, FMS) и компоненты систем видео трансляций. Также в одной из будущих своих статей я планирую сделать сравнительную таблицу функционала модуля Ngnix-rtmp-module и других медиа серверов.

Онлайн трансляция по протоколу HLS

Сегодня мы рассмотрим, как с помощью модуля Nginx-rtmp-module организовать простейшую трансляцию с адаптивным битрейтом по протоколу HLS. В первую очередь нам необходимо скачать исходные коды веб-сервера Nginx с официального сайта. Все команды, представленные ниже исполнялись в Linux.

Извлечь файлы из архива.

make install

Теперь рассмотрим один пример. Мы отправляем на сервер три видео-потока:

  • test1 с битрейтом 256 кбит/с,
  • test2 с битрейтом 512 кбит/с,
  • test3 с битрейтом 1024 кбит/с.

Наша задача, чтобы клиент, использующий протокол HLS (устройства: Mac, iPad, iPhone) мог динамически переключаться между потоками, в зависимости от качества Интернет соединения. Для этого нам необходимо в директории /usr/local/nginx/html создать файл с расширением m3u8, например playlist.m3u8, со следующим содержимым:

Просмотр трансляции

Для просмотра видео-потоков необходимо в веб-страницу сайта встроить следующий код.

[ip-адрес(nginx сервера)] — ip-адрес вашего nginx сервера.

[название плейлиста] — название файла, созданного в предыдущем пункте (playlist.m3u8).

Ниже, приведен пример простейшего конфигурационного файла nginx.conf.

worker_processes 1;

listen 1935;

application testlive

hls_path /tmp/hls;

hls_nested on;

allow publish 10.10.146.148;

deny publish all;

listen 8080;

server_name rtmp_test;

charset utf-8;

index index.html index.htm;

application/vnd.apple.mpegurl m3u8;

alias /tmp/hls;

Заключение

Эта статья была написана и опубликована совместно c моим коллегой Евгением Петровым. Мы используем данный модуль (Ngnix-rtmp) в разных проектах. Если у кого-то появятся вопросы по Ngnix-rtmp, Wowza серверу, пишите. Если вам нужно что-то настроить или получить консультацию по медиа-серверам и мультимедийным системам, также можете обращаться ко мне и нашей команде через форму контактов.

Читайте также: