Второй компьютер без карты захвата. OBS - NVENC - NGINX - x264

Краткая инструкция по сжатию с помощью второго ПК, при отсутствии карт захвата.

 

 

На данном рисунке приведены три способа. 

1. Обычный. 1ПК

2. С использованием карты захвата на 2ПК.

3. Через nvenc-захват с высоким битрейтом.

 

Собственно, рассмотрим третий способ, он опирается на 1ый, с добавлением промежуточного звена, которым выступает 2ой ПК.

 

OBS-1PC (nvenc-захват)  >  OBS-2PC (x264-сжатие)  >  server

ShadowPlay-1PC (nvenc-захват)  >  OBS-2PC (x264-сжатие)  >  server

 

 

Рекомендация к производительности 2го ПК.

1. Второй компьютер должен быть по мощности как минимум позволяющий x264 на пресете medium, иначе сжатие на 2'ом ПК будет хуже по качеству, нежели сжимать в NVENC'e сразу на сервер. 

2. Если второй компьютер (процессор) позволяет x264 на пресете veryslow, то вы можете присмотреться к варианту с 2-проходным режимом кодирования (на пресете slower). Но за увеличение качества, придётся расплачиватся доп.временем задержки - https://goodgame.ru/topic/102016/

 

 

0) Подготовка

Необходимо, чтобы 1'ый и 2'ой ПК находились в одной локальной сети. Например подключенные к маршрутизатору/роутеру. И имели статические IP адресса.

Например 192.168.1.2 и 192.168.1.3., 192.168.1.1 у роутера.

Так-же, необходимо настроить фаервол на втором ПК, Для беспрепятственного доступа первого ПК, ко второму или по порту 1935 (TCP/UDP)

 

 

1) Скачиваем софт для 2'го ПК:

nginx с rtmp модулем

https://github.com/illuspas/nginx-rtmp-win32/archive/nms.zip

 

 

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

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

worker_processes  1;
error_log  logs/error.log crit;
events {
    worker_connections  1024;
}
rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;
        application app {
            live on;
            record off;
            allow publish 127.0.0.1;
            allow publish 192.168.1.2;
            deny publish all;
        }
    }
}

 

Обратите внимание, <192.168.1.2> - адрес 1ПК

 

Далее, создаём рядом с nginx.exe файл start-nginx.bat, содержащий строки

nginx.exe -s stop

ping -n 3 localhost > nul

start /HIGH /WAIT nginx.exe

 

Далее, уже имеющийся файл stop.bat, переименуйте в stop-nginx.bat, в котором должно быть:

nginx.exe -s stop
ping -n 3 localhost > nul
taskkill /F /IM nginx.exe /T

 

Помните, закрывая окно с работающим nginx, вы не останавливаете работу nginx, только через stop-nginx.bat происходит полное завершение его работы!

 

 

3) Настройка захвата (выполняется на 1ПК)

 

А) Захват через OBS

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

 

Б) Захват через ShadowPlay (GeForce Experience)

Данный вариант, предусматривает только захват игры, наложение эффектов только на втором пк.

Полезен тем, что максимально минимизирует оказываемую нагрузку на игровой пк. Например в случае Core-i5 с 4мя ядрами, это будет полезно!

 

Для этого переходим в расширенный режим. И указываем следующие опции 

 

CBR / Битрейт = 50 000 !

Ключевые кадры = 1 / Пресет = Высокое качество

Профиль = High / Уровень = 5.1 / Двухпроходное кодирование = да / B-кадры = 2

 

Во вкладке "Аудио" поставьте битрейт 320 kbps.

 

Далее, в настройках вещания, укажите пользовательский сервер с адресом

rtmp://192.168.1.3/app

Где <192.168.1.3> - статический адресс 2'го ПК.

 

1. Необходимо иметь последнюю версию GeForce Experience

https://www.geforce.com/geforce-experience/download

2. В файле "hosts" по адрессу "C:\Windows\System32\drivers\etc" добавить строку:

192.168.1.3 live-hkg.twitch.tv

3. В настройках GeForce Experience произвести подключение к Twitch

Выбрать сервер Asia:Hong Kong

Установить пользовательские настройки качества 720/1080p 60/30fps и максимальный битрейт 18мбит (раньше можно было и 50мбит, может быть еще вернут)

 

* 192.1.1.3 - статический адресс 2ПК

* Если трансляция только на GG, то необходим twitch аккаунт и ваш <stream key> просто для галочки, трансляция туда вестись не будет!!

* Вы так-же можете использовать второй акк с его <stream key> на твиче, и указывать его для ShadowPlay, дабы тот не вмешивался в название трансляции и пр. и менял их на втором акк.

 

 

4) Настройка приёма (выполняется на 2ПК)

 

Необходим OBS для 2го ПК.

Указывайте в нём "Источник медия".

Локальный файл - нет

Ввод -  rtmp://127.0.0.1/app [в случаее OBS захвата]

Ввод -  rtmp://127.0.0.1/app/<stream key> [в случаее ShadowPlay захвата]

 

Настройки сжатия видео и аудио потоков и сервера - по вашему усмотрению,

 

 

5) Порядок запуска

 

1. NGINX (2ПК), можно сделать на автозапуске windows, ресурсы не потребляет.

2. OBS (1ПК) / ShadowPlay (1ПК), стартуем захват и передачу на 2ой ПК

3. OBS (2ПК), добавляем приём и стартуем основную трансляцию

 

 

6) Рестрим

 

Если необходимо отправлять перекодированный поток сразу на несколько серверов.

1. Укажите адрес отправки у OBS (2ПК) вида:

rtmp://localhost/restream

 

2. Добавьте новую <restream> секцию в nginx.conf

worker_processes  1;
error_log  logs/error.log crit;
events {
    worker_connections  1024;
}
rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;
        application app {
            live on;
            record off;
            allow publish 127.0.0.1;
            allow publish 192.168.1.2;
            deny publish all;
        }
        application restream {
            live on;
            record off;
            allow publish 127.0.0.1;
            deny publish all;
            push rtmp://live-fra.twitch.tv/app/<key>;
            push rtmp://msk.goodgame.ru:1940/live/<key>;
        }
    }
}

Указывайте rtmp адреса серверов через push  (не забудьте про ; в конце строк)

 

 


 

p.s. см. так-же
* Подбор оптимальных настроек x264 https://goodgame.ru/topic/102755
* Двухпроводное кодирование сегментами <GPUCPU 1+2pass> https://goodgame.ru/topic/102016/
* Передача 1080p60 на карту захвата 720p60 https://goodgame.ru/topic/102304/