Меню Рубрики

Nginx rtmp module windows

Онлайн трансляции с помощью модуля Ngnix-rtmp-module

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

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

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

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

Ngnix-rtmp

Базовый функционал медиа сервера, также можно реализовать с помощью бесплатного программного обеспечения — модуля Ngnix-rtmp-module, который на данный момент поддерживает такие потоковые протоколы как RTMP и HLS.

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

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

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

  • wgethttp://nginx.org/download/nginx-1.4.1.tar.gz

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

Скачать zip архив с исходными файлами модуля nginx-rtmp-module и извлечь файлы из архива.

  • wget https://github.com/arut/nginx-rtmp-module/archive/master.zip

Теперь нам необходимо скомпилировать nginx с модулем nginx-rtmp-module, для этого при конфигурации nginx нужно указать в опции —add-module расположение исходных файлов nginx-rtmp-module, а также необходимо указать дополнительную опцию with-http_ssl_module.

./configure —add-module=/home/nginx/nginx-rtmp-module-master —with-http_ssl_module

  • Если все прошло без ошибок, можно приступать к настройке сервера. По умолчанию сервер устанавливается в директорию /usr/local/nginx . Конфигурационный файл сервера nginx.conf, находится в директории /usr/local/nginx/conf . Рассмотрим подробнее секцию rtmp:server конфигурационного файла. Параметр listen указывает порт на котором сервер будет принимать rtmp запросы.
  • Далее мы открываем секцию для настройки приложения testlive. Здесь мы указываем, что у нас live-поток — параметр live on, включаем поддержку протокола hls для этого приложения – параметр hls on.
  • С помощью параметра hls_path мы задаем директорию в которой буду располагаться чанки (кусочки) потока. Для того чтобы чанки (кусочки) для каждого видео потока располагались в отдельной директории необходимо подключить директиву hls_nested on.
  • Далее с помощью параметра allow publish мы разрешаем публиковать потоки с своего компьютера, а с помощью параметра deny publish all запрещаем всем остальным публиковать видео.
  • Теперь рассмотрим секцию http:server . В параметре listen необходимо указать на коком порту сервер будет принимать http запросы. Мы указываем порт 8080. И из примера конфигурационного файла перенести секцию http:server:location /hls . Посмотреть более подробную информацию по всем директивам конфигурационного файла можно по адресу: https://github.com/arut/nginx-rtmp-module/wiki/Directives.
  • Настало время запустить сервер. Для этого необходимо перейти в директорию/usr/local/nginx/bin и выполнить команду ./nginx.

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

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

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

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

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

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

Источник

Онлайн вещание через Nginx-RTMP: несколько готовых рецептов

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

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

Коротко об 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.


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

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

Естественно, вы можете ретранслировать видео или аудио файл (или поток) 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

Источник

Nginx rtmp module windows

Краткая инструкция по созданию рестрима при помощи Nginx.

1) Скачиваем

Сам Nginx уже с модулем rtmp

WEB морда для отслеживание потоков

2) Необходимо все разархивировать

nginx-rtmp-win32-master.zip в папку C:\Nginx\nginx-rtmp-win32-master

nginx-rtmp-module-master.zip в папку C:\Nginx\nginx-rtmp-win32-master\www2

3) Настраиваем Nginx

для этого необходимо отредактировать C:\Nginx\nginx-rtmp-win32-master\conf\nginx.conf

error_log logs/error.log debug;

events <
worker_connections 1024;
>

rtmp <
server <
listen 1935;

application live <
live on;
>

application hls <
live on;
hls on;
hls_path temp/hls;
hls_fragment 8s;
>
>
>

http <
server <
listen 8080;

location / <
root www;
>

location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>

location /stat.xsl <
root www;
>

location /hls <
#server hls fragments
types <
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
>
alias temp/hls;
expires -1;
>

в секции rtmp:

rtmp <
server <
listen 1935;
ping 30s;
notify_method get;

application myapp <
live on;
push rtmp://localhost/GG;
push rtmp://localhost/YOUTUBE;
push rtmp://localhost/YOUTUBEBACKUP;
push rtmp://localhost/TWITCH;
push rtmp://localhost/CYBERGAME;

application GG <
live on;
record off;
push rtmp://msk.goodgame.ru:1940/live/ключ трансляции;
>
application YOUTUBE <
live on;
record off;
push rtmp://a.rtmp.youtube.com/live2/ключ трансляции;
>
application YOUTUBEBACKUP <
live on;
record off;
push rtmp://b.rtmp.youtube.com/live2?backup=1/ключ трансляции;
>

application TWITCH <
live on;
record off;
push rtmp://live-fra.twitch.tv/app/Ключ трансляции;
>
application CYBERGAME <
live on;
record off;
push rtmp://st.cybergame.tv:1953/live/ключ трансляции;
>

с начало создаем сервис на который мы будем стриметь и который будет рестриметь на другие источники «application myapp <", где myapp его название, которое будем в бивать в настройки OBS или XSplit.

Далее описываем куда будем рестриметь что бы было все красиво

«push rtmp://localhost/’имя сервиса’ «

Теперь создаем сами потоки рестрима для примера GG

application GG <
live on;
record off;
push rtmp://msk.goodgame.ru:1940/live/ключ трансляции;
>

где самое главное это push rtmp://rtmp сервер/ключ трансляции;

Должно быть все понятно, тут нечего сложного.

в секции http:

http <
server <
listen 8080;

location / <
root www;
>

location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>

location /stat.xsl <
root www;
>

location /hls <
#server hls fragments
types <
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
>
alias temp/hls;
expires -1;
>

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

server <
listen 8081;
server_name localhost;
root www2;
location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>
location /stat.xsl <
# you can move stat.xsl to a different location
root www2;
>

# rtmp control
location /control <
rtmp_control all;
>

error_page 500 502 503 504 /50x.html;
location = /50x.html <
root html;
>
>

где самое главное поменять порт, я поставил «listen 8081;»

пусть к корневому каталогу «root www2;» где указывается папка создаваемая в самом начале «nginx-rtmp-module-master.zip в папку C:\Nginx\nginx-rtmp-win32-master\www2»

остальное можно не трогать.

4) Проверяем настройки

запускаем командную строку, для этого необходимо нажать на «Пуск» и в поле поиска вбить «cmd», или «Пуск/Все программы/Стандартные/Командная строка» после чего появляется окно.

Далее переходим в каталог с Nginx, для этого набираем «cd Путь», в моем случае cd C:\Nginx\nginx-rtmp-win32-master

Далее пишем nginx -t и должны увидеть следующее

nginx: the configuration file C:\nginx/conf/nginx.conf syntax is ok
nginx: configuration file C:\nginx/conf/nginx.conf test is successful

Если выводит нечто другое — вчитываемся в ошибку, пытаемся исправить (обычно это не поставленная точка с запятой или забытая скобка).

Если все верно то запускаем nginx: набираем nginx, жмем Enter. Командная строка зависнет — это нормально, значит все нормально запустилось и что бы точно убедится открываем браузер и запускаем http://localhost:8081/stat , должны увидеть табличку

Теперь можно остановить nginx, для этого запускаем опять командную строку, так же переходим в папку с Nginx, «cd C:\Nginx\nginx-rtmp-win32-master» и что бы сотановить сервер нам надо набрать nginx -s stop. Или просто некорректно вырубить из диспетчера задач процесс.

5) Настраиваем стрим-программу.

Для примера покажу настройки OBS.

Тут все совсем просто: нужно указать в качестве сервера наш компьютер.

Для этого лезем в настройки и в настройках Трансляции выбираем Сервер вещания «Custom» и в FMS URL: rtmp://localhost/myapp

где «myapp» это название которое мы указывали в настройках nginx в секции rtmp.

Все теперь готово, запускаем сервер Nginx и запускаем трансляцию, о состоянии рестримов можно отслеживать через WEB морду http://localhost:8081/stat

есть еще WEB морда изначальная http://localhost:8080/ , но я в ней не разбирался и мне она не нужна была.

6) Для удобства запуска и остановки сервера

Для этого создадим 3 bat файлика

nginx-start.bat — для старта

@ECHO OFF
set root=C:\Nginx\nginx-rtmp-win32-master
cd /D %root%
start nginx.exe

nginx-reload.bat — для применения изменения конфигов

@ECHO OFF
set root=C:\Nginx\nginx-rtmp-win32-master
cd /D %root%
nginx.exe -s reload

nginx-stop.bat — для остановки

@ECHO OFF
set root=C:\Nginx\nginx-rtmp-win32-master
cd /D %root%
nginx.exe -s stop

При этом, nginx-start.bat можно положить в автозагрузку.

где «set root=C:\Nginx\nginx-rtmp-win32-master» пусть до Nginx сервера, куда мы все разархивировали.

7) Безопасность

Теперь когда все работает, надо подумать о безопасности, что бы не кто не мог стриметь кроме вас на ваш сервер.

Для этого создадим белые IP адреса, с которых можно стриметь

для этого в секции в настройках Nginx (C:\Nginx\nginx-rtmp-win32-master\conf\nginx.conf) в секции rtmp нам нужно кое что дописать.

В каждом application нудно добавить следующие настройки:

allow publish 127.0.0.1; # локальный адрес
allow publish 192.168.1.13; # ip адрес ПК с которого будет идти стрим
allow publish 83.153.39.122; # адрес с которого будет идти стрим в не дома
deny publish all; # Запретить все остальные

вот так выглядят полностью мои настройки C:\Nginx\nginx-rtmp-win32-master\conf\nginx.conf

error_log logs/error.log debug;

events <
worker_connections 1024;
>

rtmp <
server <
listen 1935;
ping 30s;
notify_method get;

application myapp <
live on;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;

push rtmp://localhost/GG;
push rtmp://localhost/YOUTUBE;
push rtmp://localhost/YOUTUBEBACKUP;
push rtmp://localhost/TWITCH;
push rtmp://localhost/CYBERGAME;

application GG <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://msk.goodgame.ru:1940/live/ключ трансляции;
>
application YOUTUBE <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://a.rtmp.youtube.com/live2/ключ трансляции;
>
application YOUTUBEBACKUP <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://b.rtmp.youtube.com/live2?backup=1/ключ трансляции;
>
application TWITCH <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://live-fra.twitch.tv/app/Ключ трансляции;
>
application CYBERGAME <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://st.cybergame.tv:1953/live/ключ трансляции;
>

http <
server <
listen 8080;

location / <
root www;
>

location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>

location /stat.xsl <
root www;
>

location /hls <
#server hls fragments
types <
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
>
alias temp/hls;
expires -1;
>

>
server <
listen 8081;
server_name localhost;
root www2;
location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>
location /stat.xsl <
# you can move stat.xsl to a different location
root www2;
>

# rtmp control
location /control <
rtmp_control all;
>

error_page 500 502 503 504 /50x.html;
location = /50x.html <
root html;
>
>

В общем на это все.

Это моя первая статья, извините если есть какие то недочеты, надеюсь эта статья вам поможет.

Краткая инструкция по созданию рестрима при помощи Nginx.

1) Скачиваем

Сам Nginx уже с модулем rtmp

WEB морда для отслеживание потоков

2) Необходимо все разархивировать

nginx-rtmp-win32-master.zip в папку C:\Nginx\nginx-rtmp-win32-master

nginx-rtmp-module-master.zip в папку C:\Nginx\nginx-rtmp-win32-master\www2

3) Настраиваем Nginx

для этого необходимо отредактировать C:\Nginx\nginx-rtmp-win32-master\conf\nginx.conf

error_log logs/error.log debug;

events <
worker_connections 1024;
>

rtmp <
server <
listen 1935;

application live <
live on;
>

application hls <
live on;
hls on;
hls_path temp/hls;
hls_fragment 8s;
>
>
>

http <
server <
listen 8080;

location / <
root www;
>

location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>

location /stat.xsl <
root www;
>

location /hls <
#server hls fragments
types <
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
>
alias temp/hls;
expires -1;
>

в секции rtmp:

rtmp <
server <
listen 1935;
ping 30s;
notify_method get;

application myapp <
live on;
push rtmp://localhost/GG;
push rtmp://localhost/YOUTUBE;
push rtmp://localhost/YOUTUBEBACKUP;
push rtmp://localhost/TWITCH;
push rtmp://localhost/CYBERGAME;

application GG <
live on;
record off;
push rtmp://msk.goodgame.ru:1940/live/ключ трансляции;
>
application YOUTUBE <
live on;
record off;
push rtmp://a.rtmp.youtube.com/live2/ключ трансляции;
>
application YOUTUBEBACKUP <
live on;
record off;
push rtmp://b.rtmp.youtube.com/live2?backup=1/ключ трансляции;
>

application TWITCH <
live on;
record off;
push rtmp://live-fra.twitch.tv/app/Ключ трансляции;
>
application CYBERGAME <
live on;
record off;
push rtmp://st.cybergame.tv:1953/live/ключ трансляции;
>

с начало создаем сервис на который мы будем стриметь и который будет рестриметь на другие источники «application myapp <", где myapp его название, которое будем в бивать в настройки OBS или XSplit.

Далее описываем куда будем рестриметь что бы было все красиво

«push rtmp://localhost/’имя сервиса’ «

Теперь создаем сами потоки рестрима для примера GG

application GG <
live on;
record off;
push rtmp://msk.goodgame.ru:1940/live/ключ трансляции;
>

где самое главное это push rtmp://rtmp сервер/ключ трансляции;

Должно быть все понятно, тут нечего сложного.

в секции http:

http <
server <
listen 8080;

location / <
root www;
>

location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>

location /stat.xsl <
root www;
>

location /hls <
#server hls fragments
types <
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
>
alias temp/hls;
expires -1;
>

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

server <
listen 8081;
server_name localhost;
root www2;
location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>
location /stat.xsl <
# you can move stat.xsl to a different location
root www2;
>

# rtmp control
location /control <
rtmp_control all;
>

error_page 500 502 503 504 /50x.html;
location = /50x.html <
root html;
>
>

где самое главное поменять порт, я поставил «listen 8081;»

пусть к корневому каталогу «root www2;» где указывается папка создаваемая в самом начале «nginx-rtmp-module-master.zip в папку C:\Nginx\nginx-rtmp-win32-master\www2»

остальное можно не трогать.

4) Проверяем настройки

запускаем командную строку, для этого необходимо нажать на «Пуск» и в поле поиска вбить «cmd», или «Пуск/Все программы/Стандартные/Командная строка» после чего появляется окно.

Далее переходим в каталог с Nginx, для этого набираем «cd Путь», в моем случае cd C:\Nginx\nginx-rtmp-win32-master

Далее пишем nginx -t и должны увидеть следующее

nginx: the configuration file C:\nginx/conf/nginx.conf syntax is ok
nginx: configuration file C:\nginx/conf/nginx.conf test is successful

Если выводит нечто другое — вчитываемся в ошибку, пытаемся исправить (обычно это не поставленная точка с запятой или забытая скобка).

Если все верно то запускаем nginx: набираем nginx, жмем Enter. Командная строка зависнет — это нормально, значит все нормально запустилось и что бы точно убедится открываем браузер и запускаем http://localhost:8081/stat , должны увидеть табличку

Теперь можно остановить nginx, для этого запускаем опять командную строку, так же переходим в папку с Nginx, «cd C:\Nginx\nginx-rtmp-win32-master» и что бы сотановить сервер нам надо набрать nginx -s stop. Или просто некорректно вырубить из диспетчера задач процесс.

5) Настраиваем стрим-программу.

Для примера покажу настройки OBS.

Тут все совсем просто: нужно указать в качестве сервера наш компьютер.

Для этого лезем в настройки и в настройках Трансляции выбираем Сервер вещания «Custom» и в FMS URL: rtmp://localhost/myapp

где «myapp» это название которое мы указывали в настройках nginx в секции rtmp.

Все теперь готово, запускаем сервер Nginx и запускаем трансляцию, о состоянии рестримов можно отслеживать через WEB морду http://localhost:8081/stat

есть еще WEB морда изначальная http://localhost:8080/ , но я в ней не разбирался и мне она не нужна была.

6) Для удобства запуска и остановки сервера

Для этого создадим 3 bat файлика

nginx-start.bat — для старта

@ECHO OFF
set root=C:\Nginx\nginx-rtmp-win32-master
cd /D %root%
start nginx.exe

nginx-reload.bat — для применения изменения конфигов

@ECHO OFF
set root=C:\Nginx\nginx-rtmp-win32-master
cd /D %root%
nginx.exe -s reload

nginx-stop.bat — для остановки

@ECHO OFF
set root=C:\Nginx\nginx-rtmp-win32-master
cd /D %root%
nginx.exe -s stop

При этом, nginx-start.bat можно положить в автозагрузку.

где «set root=C:\Nginx\nginx-rtmp-win32-master» пусть до Nginx сервера, куда мы все разархивировали.

7) Безопасность

Теперь когда все работает, надо подумать о безопасности, что бы не кто не мог стриметь кроме вас на ваш сервер.

Для этого создадим белые IP адреса, с которых можно стриметь

для этого в секции в настройках Nginx (C:\Nginx\nginx-rtmp-win32-master\conf\nginx.conf) в секции rtmp нам нужно кое что дописать.

В каждом application нудно добавить следующие настройки:

allow publish 127.0.0.1; # локальный адрес
allow publish 192.168.1.13; # ip адрес ПК с которого будет идти стрим
allow publish 83.153.39.122; # адрес с которого будет идти стрим в не дома
deny publish all; # Запретить все остальные

вот так выглядят полностью мои настройки C:\Nginx\nginx-rtmp-win32-master\conf\nginx.conf

error_log logs/error.log debug;

events <
worker_connections 1024;
>

rtmp <
server <
listen 1935;
ping 30s;
notify_method get;

application myapp <
live on;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;

push rtmp://localhost/GG;
push rtmp://localhost/YOUTUBE;
push rtmp://localhost/YOUTUBEBACKUP;
push rtmp://localhost/TWITCH;
push rtmp://localhost/CYBERGAME;

application GG <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://msk.goodgame.ru:1940/live/ключ трансляции;
>
application YOUTUBE <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://a.rtmp.youtube.com/live2/ключ трансляции;
>
application YOUTUBEBACKUP <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://b.rtmp.youtube.com/live2?backup=1/ключ трансляции;
>
application TWITCH <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://live-fra.twitch.tv/app/Ключ трансляции;
>
application CYBERGAME <
live on;
record off;
allow publish 127.0.0.1;
allow publish 192.168.1.13;
allow publish 83.153.39.122;
deny publish all;
push rtmp://st.cybergame.tv:1953/live/ключ трансляции;
>

http <
server <
listen 8080;

location / <
root www;
>

location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>

location /stat.xsl <
root www;
>

location /hls <
#server hls fragments
types <
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
>
alias temp/hls;
expires -1;
>

>
server <
listen 8081;
server_name localhost;
root www2;
location /stat <
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
>
location /stat.xsl <
# you can move stat.xsl to a different location
root www2;
>

# rtmp control
location /control <
rtmp_control all;
>

error_page 500 502 503 504 /50x.html;
location = /50x.html <
root html;
>
>

В общем на это все.

Это моя первая статья, извините если есть какие то недочеты, надеюсь эта статья вам поможет.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Nginx rtmp hls windows
  • Nginx php mysql phpmyadmin windows
  • Nginx php fpm windows
  • Nginx php config windows
  • Nfs файловая система windows