Игровой форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Игровой форум » Всё, что нужно стримерам » Рестрим через Nginx


Рестрим через Nginx

Сообщений 1 страница 10 из 10

1

Краткая инструкция по созданию рестрима при помощи 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;
        }
    }

}

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

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

0

2

есть небезосновательное мнение, что если плеер отвалился, то об этом напишут в чате. Если об этом не напишут в чате, то плеер на отвалившемся сервисе не нужен.

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

#5, если уж на то пошло, nginx на винду устанавливать - это уже зашквар peka

0

3

Спасибо автору за пост, настроил по гайду.

Решил сюда скинуть готовый сетап - совсем упростить задачу тем кто видит это в первый раз.

https://www.dropbox.com/s/849busj9nildlrg/nginx-rtmp (copy).zip?dl=0

0

4

Сюда бы еще инфу о том, на сколько все это добро нагружает (или не нагружает) систему

0

5

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

#2, грузит систему приблизительно НИКАК. Транскодинг идет на стороне стримера, нжинкс выполняет роль прокси-сервера. Грузится только канал (битрейт стрима * количество рестримов).

Другое дело - нжинкс можно научить стартовать транскодинг - вот тогда уже будет нагрузка в зависимости от уровня транскодинга.

0

6

Систему не грузит никак, только трафик увеличивается ровно на число рестримов. Но эта программа умеет и конвертировать поток.

Например за место такого "push rtmp://localhost/TWITCH;" можно написать exec "ffmpeg -i rtmp://localhost/myapp -vcodec libx264 -preset veryfast -b:v 2000k -maxrate 2000k -bufsize 2000k -s 1280x720 -sws_flags lanczos -r 30 -acodec copy -f flv rtmp://localhost/TWITCH;" тогда начинает преобразовывать поток по тем параметрам что указаны. Вот тогда будет съедать процессора очень много, тут зависит от самого проца, но одна такая конвертация съедает приблизительно 10-20% (может и больше)

Так же эту программку можно настроить на другом компе и рестриметь через него. Тогда легко можно включать и преобразовать потом, но не вижу в этом смысла. У меня например Nginx поднят на моем личном сервере Ubuntu и все очень гладко и ровно работает.

Если нужна будет инструкция для установки Nginx на Ubuntu Server (только консоль, отсутствует рабочий стол) я напишу, если попросите. Там все легче и одновременно и сложнее.

0

7

есть небезосновательное мнение, что если плеер отвалился, то об этом напишут в чате. Если об этом не напишут в чате, то плеер на отвалившемся сервисе не нужен.

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

0

8

, я не тестировал данную функцию на винде, поэтому просто написал что такая возможность есть, потом могу дописать как ее правильно включить. Изначально я себе на ubuntu ставил и не рассчитывал писать о таких возможностей здесь. Тут это не главное.

#6, по поводи nginx  на винде я согласен, но большнесво стримеров нет второго компа и будут настраивать со своего компа, а значит нужен nginx под виндой, да и линуксом мало кто владеет, а те кто владеют, сами могут настроить.

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

0

9

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

0

10

Добрый день.

Все сделал по инструкции.

При запуске стрима (start streaming) пишет - Failed to connect to server.

OBS - studio 0.15.4 (64 bit, windows 10)

0


Вы здесь » Игровой форум » Всё, что нужно стримерам » Рестрим через Nginx


Рейтинг форумов | Создать форум бесплатно