Merhaba arkadaşlar, bugün sizlere Nginx web sunucusunu kullanarak nasıl profesyonel ve yüksek performanslı bir canlı yayın (live streaming) sunucusu kuracağımızı anlatacağım. Özellikle RTMP (gerçek zamanlı mesajlaşma protokolü) ve HLS (HTTP Canlı Yayın) protokolleri üzerinde duracağız. Bu yapılandırma, kendi oyun yayınınızı, eğitim videolarınızı veya kurumsal etkinlik yayınlarınızı taşıyabileceğiniz sağlam bir altyapı sağlar. Benim de birkaç sunucumda kullandığım, test edilmiş bir yöntemi paylaşıyorum.
Gereksinimler ve RTMP Modülünün Derlenmesi
Öncelikle, Nginx'in standart dağıtımında RTMP modülü gelmez. Bu yüzden Nginx'i kaynak kodundan, RTMP modülü ile birlikte derlememiz gerekiyor. Aşağıdaki adımları sırasıyla takip edelim.
Nginx Derleme ve Kurulum Adımları
Şimdi indirdiğimiz kaynak kodlarını derleyip kuralım. Burada dikkat etmemiz gereken nokta, `./configure` aşamasında RTMP modülünün yolunu doğru vermek.
Kurulum tamamlandı. Varsayılan olarak Nginx, /usr/local/nginx/ dizinine kurulur. Sistem servisini başlatalım.
RTMP Yayın Yapılandırması
Şimdi asıl işe, yani yayın konfigürasyonuna geçelim. Ana Nginx konfigürasyon dosyasını açalım.
Dosyanın en altına, `http { ... }` bloğunun DIŞINA, aşağıdaki RTMP yapılandırma bloğunu ekleyin. Bu blok, RTMP yayınlarınızın temelini oluşturacak.
Ayrıca, HLS segmentlerini sunabilmek için `http { ... }` bloğunun içine, `server { ... }` bölümüne aşağıdaki `location` direktifini eklemelisiniz.
Konfigürasyonu kaydedip çıktıktan sonra Nginx'i yeniden başlatalım.
Güvenlik ve Optimizasyon Önerileri
Arkadaşlar, buraya çok dikkat etmelisiniz. RTMP sunucusunu olduğu gibi internete açarsanız, herkes yayın yapabilir. Temel güvenlik için birkaç ayar şart.
1. Yayın Anahtarı (Stream Key) Zorunluluğu: OBS'de sunucu adresinizi `rtmp://sunucu_ip/live` şeklinde değil, `rtmp://sunucu_ip/live/``yayin_anahtariniz` şeklinde girin. Sunucu tarafında bu anahtarı kontrol eden basit bir script yazabilirsiniz (`on_publish` callback'i ile).
2. IP Kısıtlama: Sadece belirli IP bloklarının yayın yapmasına izin vermek için `allow publish` ve `deny publish` direktiflerini kullanın.
3. Sunucu Kaynakları: Yüksek eşzamanlı izleyici sayısı bekliyorsanız, Nginx çalışan prosesi (`worker_processes`) ve bağlantı limitlerini (`worker_connections`) artırmayı unutmayın. Dosya /usr/local/nginx/conf/nginx.conf içinde bu ayarları yapabilirsiniz.
4. HLS Buffer Optimizasyonu: Yayın gecikmesini (latency) azaltmak için `hls_fragment` ve `hls_playlist_length` değerlerini düşürebilirsiniz, ancak bu sunucu yükünü biraz artıracaktır. 1s fragment ve 10s playlist length denenebilir.
Test ve Yayın Başlatma
Her şey hazır! OBS Studio'yu açın ve yayın ayarlarına girin.
Hizmet: Özel
Sunucu: `rtmp://SUNUCU_IP_ADRESINIZ/live`
Yayın Anahtarı: `test_yayini` (veya belirlediğiniz herhangi bir anahtar)
Başlat'a tıkladıktan sonra, bir video oynatıcıda (VLC gibi) `http://SUNUCU_IP_ADRESINIZ/hls/test_yayini.m3u8` adresini açarak HLS yayınınızı izleyebilirsiniz. RTMP için ise `rtmp://SUNUCU_IP_ADRESINIZ/live/test_yayini` adresini kullanabilirsiniz.
Sonuç olarak, Nginx ile kendi canlı yayın altyapınızı kurmak hem maliyet açısından avantajlı hem de tam kontrol sağlıyor. Performans ve güvenlik ayarlarını sunucunuzun kapasitesine ve ihtiyacınıza göre mutlaka ince ayar yapın.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? RTMP yerine SRT gibi farklı protokolleri deneyen var mı? Optimizasyon için ek tavsiyeleriniz varsa veya takıldığınız bir nokta olursa, aşağıya yazmaktan çekinmeyin. Herkese sorunsuz yayınlar!
Öncelikle, Nginx'in standart dağıtımında RTMP modülü gelmez. Bu yüzden Nginx'i kaynak kodundan, RTMP modülü ile birlikte derlememiz gerekiyor. Aşağıdaki adımları sırasıyla takip edelim.
Bash:
# Gerekli kütüphaneleri yükleyelim
sudo apt-get update
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y
# Nginx kaynak kodunu ve RTMP modülünü indirelim
cd /usr/src
sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz
sudo tar -zxvf nginx-1.24.0.tar.gz
sudo git clone https://github.com/arut/nginx-rtmp-module.git
Şimdi indirdiğimiz kaynak kodlarını derleyip kuralım. Burada dikkat etmemiz gereken nokta, `./configure` aşamasında RTMP modülünün yolunu doğru vermek.
Bash:
cd /usr/src/nginx-1.24.0
sudo ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
sudo make
sudo make install
Kurulum tamamlandı. Varsayılan olarak Nginx, /usr/local/nginx/ dizinine kurulur. Sistem servisini başlatalım.
Bash:
sudo /usr/local/nginx/sbin/nginx
Şimdi asıl işe, yani yayın konfigürasyonuna geçelim. Ana Nginx konfigürasyon dosyasını açalım.
Bash:
sudo nano /usr/local/nginx/conf/nginx.conf
Dosyanın en altına, `http { ... }` bloğunun DIŞINA, aşağıdaki RTMP yapılandırma bloğunu ekleyin. Bu blok, RTMP yayınlarınızın temelini oluşturacak.
NGINX:
rtmp {
server {
listen 1935; # RTMP standart portu
chunk_size 4096;
ping 30s;
notify_method get;
application live {
live on;
record off; # Kayıt özelliğini kapatıyoruz, isteğe bağlı
# Yayını HLS formatına dönüştürmek için (OBS gibi yazılımlar için)
hls on;
hls_path /tmp/hls;
hls_fragment 3s;
hls_playlist_length 60s;
# Yayıncı bağlandığında veya koptuğunda çalışacak callback (isteğe bağlı)
on_publish http://localhost/auth_publish;
on_done http://localhost/auth_done;
}
}
}
Ayrıca, HLS segmentlerini sunabilmek için `http { ... }` bloğunun içine, `server { ... }` bölümüne aşağıdaki `location` direktifini eklemelisiniz.
NGINX:
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache; # Canlı yayın için cache'i kapat
add_header Access-Control-Allow-Origin ; # Farklı domainlerden erişime izin ver
}
Konfigürasyonu kaydedip çıktıktan sonra Nginx'i yeniden başlatalım.
Bash:
sudo /usr/local/nginx/sbin/nginx -s reload
Arkadaşlar, buraya çok dikkat etmelisiniz. RTMP sunucusunu olduğu gibi internete açarsanız, herkes yayın yapabilir. Temel güvenlik için birkaç ayar şart.
1. Yayın Anahtarı (Stream Key) Zorunluluğu: OBS'de sunucu adresinizi `rtmp://sunucu_ip/live` şeklinde değil, `rtmp://sunucu_ip/live/``yayin_anahtariniz` şeklinde girin. Sunucu tarafında bu anahtarı kontrol eden basit bir script yazabilirsiniz (`on_publish` callback'i ile).
2. IP Kısıtlama: Sadece belirli IP bloklarının yayın yapmasına izin vermek için `allow publish` ve `deny publish` direktiflerini kullanın.
3. Sunucu Kaynakları: Yüksek eşzamanlı izleyici sayısı bekliyorsanız, Nginx çalışan prosesi (`worker_processes`) ve bağlantı limitlerini (`worker_connections`) artırmayı unutmayın. Dosya /usr/local/nginx/conf/nginx.conf içinde bu ayarları yapabilirsiniz.
4. HLS Buffer Optimizasyonu: Yayın gecikmesini (latency) azaltmak için `hls_fragment` ve `hls_playlist_length` değerlerini düşürebilirsiniz, ancak bu sunucu yükünü biraz artıracaktır. 1s fragment ve 10s playlist length denenebilir.
Her şey hazır! OBS Studio'yu açın ve yayın ayarlarına girin.
Hizmet: Özel
Sunucu: `rtmp://SUNUCU_IP_ADRESINIZ/live`
Yayın Anahtarı: `test_yayini` (veya belirlediğiniz herhangi bir anahtar)
Başlat'a tıkladıktan sonra, bir video oynatıcıda (VLC gibi) `http://SUNUCU_IP_ADRESINIZ/hls/test_yayini.m3u8` adresini açarak HLS yayınınızı izleyebilirsiniz. RTMP için ise `rtmp://SUNUCU_IP_ADRESINIZ/live/test_yayini` adresini kullanabilirsiniz.
Sonuç olarak, Nginx ile kendi canlı yayın altyapınızı kurmak hem maliyet açısından avantajlı hem de tam kontrol sağlıyor. Performans ve güvenlik ayarlarını sunucunuzun kapasitesine ve ihtiyacınıza göre mutlaka ince ayar yapın.
Peki siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? RTMP yerine SRT gibi farklı protokolleri deneyen var mı? Optimizasyon için ek tavsiyeleriniz varsa veya takıldığınız bir nokta olursa, aşağıya yazmaktan çekinmeyin. Herkese sorunsuz yayınlar!