Streaming z OBS do YT i Twitch jednocześnie bez restream.io

W poradniku tym zakładam, że korzystamy z Windowsa 10.
Nie jest to poradnik krok po kroku, jest trochę chaotyczny, pomyślałem, że po prostu zamiast pisać notatki dla siebie, wrzucę to na forum :slight_smile:
Korzystanie z tych informacji niżej wymaga pewnej znajomości OBS oraz w miarę dobrego uploadu naszego łącza.

Serwer RTMP

Ściągamy nasz własny serwer który obsługuje protokół RTMP:
http://sourceforge.net/projects/monaserver/files/MonaServer_Win32.zip/download
Rozpakowujemy .zip i odpalamy plik .exe

Linux

W przypadku jeśli chcielibyśmy uruchomić ten serwer na VPS z Linuxem, sądzę że wystarczy np. kontener z nginx-rtmp typu https://hub.docker.com/r/alfg/nginx-rtmp/

OBS

Włączamy Ustawienia OBS w górnym pasku poprzez Tools -> Settings.
Wybieramy zakładkę Stream.
Z listy “Service” wybieramy “Custom…”.
Wpisujemy tam rtmp://localhost:1935/live.
Dla pola Stream key wpisujemy stream

Te ustawienia spowodują, że nasz stream zamiast być wysyłany do YT, Twitch czy innej platformy, najpierw trafi do innej aplikacji w naszym komputerze (czy też na VPSie). Od tego naszego serwera będą mogły odbierać też inne aplikacje, czyli tworzymy sobie trochę jakby rozgałęziacz czyli więcej gniazdek do stream’a :slight_smile:

Na tym etapie, zakładając, że nasze ustawienia jakości wideo są okej to możemy już odpalać streamowanie w OBS ale nie trafi jeszcze ono na platformy.

Scoop

Sugeruję instalację prostego menadżera paczek dla Windows a potem instalację ffmpeg przy jego pomocy https://scoop.sh/
Na stronie projektu jest instrukcja jak go zainstalować.
Gdy już go mamy, instalujemy ffmpega w ten sposób:

scoop install ffmpeg

Z pewnością przyda nam się też później do wielu innych aplikacji :smiley:

FFmpeg

To narzędzie jest prawdziwym kombajnem do multimediów.
W tym wypadku użyjemy go aby odebrać stream z lokalnego serwera RTMP, ewentualnie zmienić jakość w locie a następnie wypchnąć na platformę streamingową.

Podaję przykład skryptu którego sam użyłem:

ffmpeg -hide_banner -i rtmp://localhost:1935/live/stream 
-c:v copy -c:a copy -f flv rtmp://a.rtmp.youtube.com/live2/xxx-xxxx-xxxx-xxxx-xxxx 
-c:v nvenc_h264 -b:v 6000k -preset slow -vf "scale=1280:720" -c:a copy -max_muxing_queue_size 1024 -f flv rtmp://live-waw.twitch.tv/app/live_XXXXXXXX?bandwidthtest=true

W tym wypadku w OBS mam ustawiony video bitrate 12000 Kbps, z enkodowaniem NVENC i audio bitrate 160 w trybie “Simple” więc bez żadnych ustawień zaawansowanych.

Założenie jest takie aby tą oryginalną jakość ustawioną w OBS wrzucać na YT który daje z tym radę oraz reenkodować w locie zmieniając rozdzielczość na 720p z innym bitrate, również na GPU, wideo do Twitcha który dla zwykłych kont bez partnerstwa ma dość ograniczone opcje jakości.

O ile mi wiadomo przy przekroczeniu bitrate 6000 Kbps znika opcja z oryginalną jakością lub nakłada się spore opóźnienie, przyznam, że jeszcze nie zweryfikowałem tego w pełni, byłbym wdzięczny za wasze komentarze na ten temat :slight_smile:

Chcąc odpalić tą komendę należy:

  • usunąć nowe linie, dałem je dla czytelności (1 linia jako wejście oraz 2 i 3 linia jako wyjścia)
  • podmienić klucze streamu na takie wyświetlane w serwisie
  • usunąć ?bandwidthtest=true z końcówki URLa dla Twitch, ten URL daje możliwość testów bez publicznego transmitowania dla widzów czy też wysyłania im powiadomień
  • upewnić się, że odpowiada nam ustawienie enkodowania, tutaj wybrałem akurat enkodowanie na GPU od Nvidia, znacznie odciąża to procesor i nie powinno wpływać na grę, GPU ma osobne moduły do grafiki 3D oraz enkodowania wideo w locie

W oryginalnym poradniku który podlinkowałem niżej jest jeszcze jeden schemat działania.
Można ograniczyć spadek jakości dla twitcha poprzez streamowanie bitrate np. 100Mbit do serwera RTMP a następnie enkodowanie oryginalnego wideo do obu platform.

Przydatne linki

Źródło

Przy przygotowaniu tego mini poradnika skorzystałem z tego oryginalnego posta na forum OBS:

5 polubień