Краткая инструкция по созданию рестрима при помощи Nginx.
1) Скачиваем
Сам Nginx уже с модулем rtmp
https://github.com/illuspas/nginx-rtmp-win32
1.jpg
WEB морда для отслеживание потоков
https://github.com/arut/nginx-rtmp-modu … master.zip
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
изначально он выглядит так:
worker_processes 1;
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.
2.jpg
Все теперь готово, запускаем сервер 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
nginx.conf
worker_processes 1;
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;
}
}
}
В общем на это все.
Это моя первая статья, извините если есть какие то недочеты, надеюсь эта статья вам поможет.