Konsollardaki twitch yayın çıkışını yerel rtmp sunucusuna yönlendirme

Konsollardan görüntü almak için "hdmi capture card" kullanılabilir ama henüz alacak bütçeniz yoksa ve obs üzerinden yayın yapmak istiyorsanız remote play uygulamalarının ekranını yakalayıp kullanabilirsiniz.

Yalnız remote play uygulamalarında uzaktan oturum açınca konsola bağlı olan kontrolcü kapanır. Dolayısıyla siz oyunu o pencere oynarken arada bir lag olacaktır.

 

Bildiğiniz üzere xbox ve playstation konsollarında twitch'e doğrudan yayın imkanı var. Twitch'e yayın gönderme olayı RTMP protokolü üzerinden gerçekleşmekte ve bu protokol şifrelenmemiş bir bağlantı kullandığı için biz araya girip bu yayını kendi rtmp sunucumuza yönlendirebiliriz.

 

Bu yöntemin avantajı yayında düşük gecikme olması ve oynarken kendi ekranımızdan gecikmesiz oynama imkanı.

 

Nasıl oluyor peki?

Yerel ağda konsol DNS sorgusunu bizim kendi DNS sunucumuza gönderir, biz de ona twitch'in ip adresi yerine yerel ağdaki veya doğrudan bilgisayarda çalıştırdığımız nginx rtmp sunucusunun ip adresini veririz, konsol yayını bu ip adresine gönderecektir.

Daha sonra,
- isterseniz obs'in medya kaynağına rtmp linkini ekleyip yayını alırsınız, gecikme yaklaşık 2-3sn.
- isterseniz ffplay ile çok düşük geçikme ile oynatıp obs ile bu pencerenin kaydını alırsınız, gecikme yaklaşık 300-400ms.

 

Önce size en yakın twitch ingest sunucusunu bulun, bana yakın olan Avusturya sunucusuymuş.

rtmp://vie.contribute.live-video.net/app/{stream_key}
rtmp://vie02.contribute.live-video.net/app/{stream_key}

 

 

Konsol hangi sunucuya bağlanıyor?

Daha sonra konsolunuzdan 1-2 dakikalık yayın yaptığınızda inspector sayfasında bağlandığı sunucuyu da görebilirsiniz. Konsol yayını beklediğim gibi Avusturya VIE sunucusuna göndermiş.

Konsolun bağlandığı sunucuyu artık biliyoruz. 

Yerel ağda DNS sunucusu olarak ben Pi.hole kullanıyorum, pi.hole'da yerel dns kaydı ekledim. Böylece konsol Avusturya sunucusu için DNS sorgusu gönderdiğinde pi.hole cevap olarak RTMP sunucusu çalışan bilgisayarımın ip adresini gönderecek.

(pi.hole yazılımı evdeki ağa bağlı olan raspberry pi üzerinde çalışıyor, onun kurulumu vs ayrı bir konu, internette aratıp bulursunuz veya ccproxy yöntemini kaynak kısmında verdiğim youtube linkinde bulabilirsiniz.)

Kendi bilgisayarımın yerel ağdaki ip adresini kullandım.
vie.contribute.live-video.net    ----> 192.168.1.15
vie02.contribute.live-video.net  --> 192.168.1.15

Sırada yerel RTMP sunucusu olayı var,

Bunun için red5 kullananlar da gördüm ama Nginx RTMP sunucu gayet basit ve hızlı bir seçenek olduğu için Nginx RTMP sunucusu kullanacağım.

Linkteki zip dosyasında windows'ta çalışan bir nginx ve rtmp için gereken config dosyası var.
Mega.nz Nginx RTMP Server
Zip dosyasını istediğiniz yere çıkarın, start_nginx.bat ile nginx'i çalıştırın, arkaplanda çalışacaktır.
Artık konsolda twitch yayını başlatabilirsiniz, yayın yerel sunucuya gidecek.

 

Şimdi obs'te ortam kaynağı olarak kullanacağımız rtmp linkini oluşturalım.

Standart twitch rtmp push linki,
rtmp://vie.contribute.live-video.net/app/{stream_key}
Bizim kullanacağımız linkte sunucu adresi olarak rtmp sunucusu çalışan bilgisayarın yerel ip adresini veya nginx ve obs aynı bilgisayarda çalışıyorsa 127.0.0.1 kullanacağız.

"stream_key" ise twitch arayüzünden ulaşabileceğiniz yayın anahtarı oluyor. hem yayın gönderirken hem de sunucumudaki yayına ulaşırken aynı "stream_key" değişkeni kullanılır.

Sonuçta yayını nginx sunucumuzdan almak için kullanacağımız link böyle olacak,
rtmp://127.0.0.1/app/yayın_anahtari

Yöntem 1: rtmp kaynağını OBS'te ortam kaynağı olarak eklemek,

(not: başta da bahsettiğim gibi bu yöntemde 2-3sn kadar gecikme oluyor.)

Kaynağı görünür yapın, 1-2 sn içinde obs yayını almaya başlayacak.

Yöntem 2: rtmp yayınını ffplay ile gecikmesiz oynatıp pencereyi yakalamak.

Windows için hazırlanmış ffmpeg paketini linkten indirin, bize "bin" klasöründeki ffplay.exe dosyası lazım.

ffmpeg statik windows dosyası

Zip dosyasını istediğiniz yere çıkartın, sonra "bin" klasörüne gidin, sağ "shift" tuşuna basarken fare ile klasör içinde sağ tık yapın, cmd (veya powershell) penceresini burada aç deyin.

Yayını gecikmesiz olarak oynatmak için ffplay'i şu şekilde çalıştırın,

ffplay -fflags nobuffer rtmp://127.0.0.1/app/yayın_anahtari

Daha sonra açılan oynatıcı (tam ekran açılır) penceresini kapatmayın, alt+tab veya windows tuşu ile obs penceresine geçin, ffplay penceresini obs'e ekleyin.

Artık görüntü yakalama kartı olmadan konsolunuzdaki rtmp çıkışını OBS üzerinde kullanabilirsiniz.
İlk resimde 1. yöntemdeki gecikmeyi göstermeye çalıştım, gecikme yaklaşık 2200ms.
Bu resimde de 2. yöntemdeki gecikmeyi göstermeye çalıştım, yaklaşık 300ms.
Kaynaklar:
red5 ve cproxy dns yöntemi https://www.youtube.com/watch?v=KXcNR2agCe0
nginx rtmp sunucusu https://www.youtube.com/watch?v=n-EdUHNK9UI
BeğenFavori PaylaşYorum yap
Tüm blog yazılarını gör