RTMP Sunucusu ve
Canlı Yayın Altyapısı
1. Sistem Güncellemesini Yapalım
Öncelikle sunucumuzu güncel paketlerle hazırlayalım:
sudo apt update && sudo apt upgrade -yUbuntu Sunucumuzun Hostname adresini güncelleyelim
sudo hostnamectl set-hostname alandınız.comHost Klasörü içine girerek 127.0.1.1 adresinin Sağına alandınız.com yazınız.
sudo nano /etc/hostsCtrl+O Basıp Kaydedip Ctrl+X Basıp çıkalım.
2. OpenSSL, FFMPEG,
Ses, Video ve Diğer Gerekli
Paketleri Yükleyelim
sudo apt install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev ffmpeg
3. Nginx ve RTMP Modüllerini Kaynak Kodları Üzerinden Derleyelim
cd /usr/local/src
sudo wget https://nginx.org/download/nginx-1.25.3.tar.gz
sudo tar zxvf nginx-1.25.3.tar.gz
sudo git clone https://github.com/arut/nginx-rtmp-module.git
cd nginx-1.25.3
sudo ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
sudo make
sudo make install
4. Nginx Kullanıcı İzinlerini Ayarlayalım
sudo useradd -r -s /sbin/nologin nginx
sudo chown -R nginx:nginx /usr/local/nginx
5. Nginx Config Yapısını Güncelleyelim
Config dosyasını aşağıdaki yolda açıp düzenleyebilirsiniz:
sudo nano /usr/local/nginx/conf/nginx.confSistemimde kullanmış olduğum örnek config dosyasına sayfanın en aşağısından erişebilirsiniz.
Ctrl+O Basıp Kaydedip Ctrl+X Basıp çıkalım.
Örnek konfigürasyon için sitenizde farklı bir sayfa veya bölüm ekleyebilirsiniz.
6. HLS Klasörünü Oluşturalım ve İzinlerini Tanımlayalım
HLS; Canlı yayın akışımızın geleceği görüntüyü anlık olarak bulunduracağımız alan olacaktır.
sudo mkdir -p /var/www/html/hls
sudo chown -R nginx:nginx /var/www/html/hls
sudo chmod -R 755 /var/www/html/hls
7. Web Sayfamız İçin SSL Sertifikamızı Kuralım
sudo apt install certbot
sudo certbot certonly --nginx -d yayin.teknoyazi.com.tr
Eğer 80 portu kullanımda ise:
Nginx hatası alırsanız aşağıdaki kod ile deneyiniz.
sudo fuser -k 80/tcp
sudo certbot certonly --standalone -d alanadiniz.com
8. Nginx Başlatma Kodu
Nginx'i başlatalım.
sudo /usr/local/nginx/sbin/nginx
9. Web Sayfası Örneği: Canlı Yayını Tarayıcıda İzleyelim
Aşağıdaki HTML kodunu web sitenizde kullanarak HLS formatındaki canlı yayını oynatabilirsiniz:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Canlı Yayın</title>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body style="background:#000;margin:0;">
<video id="video" controls autoplay width="100%" height="auto" style="max-width: 800px; margin: auto; display: block;"></video>
<script>
var video = document.getElementById('video');
var videoSrc = 'https://yayin.teknoyazi.com.tr/hls/test.m3u8';
if (Hls.isSupported()) {
var hls = new Hls();
hls.loadSource(videoSrc);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, function () {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = videoSrc;
video.addEventListener('loadedmetadata', function () {
video.play();
});
}
</script>
</body>
</html>
10. Nginx Config Örneği
alanadınız.com Yazan yerleri kendi alan adınıza göre düzenleyiniz.
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name alanadınız.com;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /var/www/html;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
}
server {
listen 443 ssl;
server_name alanadınız.com;
ssl_certificate /etc/letsencrypt/live/alanadınız.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/alanadınız.com/privkey.pem;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /var/www/html;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
}
server {
listen 8080;
server_name localhost;
location / {
return 200 'RTMP HTTP is OK';
}
}
}
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
hls on;
hls_path /var/www/html/hls;
hls_fragment 3;
hls_playlist_length 10;
}
}
}
11. Yayın Anahtarı ve Bağlantı
Canlı Yayın için OBS Studio uygulamasını indirelim.
OBS Ayarları > Yayın > Servis [Özel] > Sunucu [rtmp://sunucu-ip-adresi/live]
Yayın Anahtarını 'Test' girip kaydedelim. Yayını Başlatabiliriz.
12. Güvenlik ve Ek Seçenekler
Canlı Yayınınıza herkesin erişememesi için Web Sayfanızda Oturum açma, IP Kısıtlaması getirebilirsiniz.
Sunucunuzda herkesin yayın yapmaması için RTMP Modülü içerisinde Yayın Anahtarı doğrulama yapabilirsiniz.
Örnek Yayın Anahtarı değişimi aşağıdadır.
Nginx.conf dosyanda ilgili rtmp bloğunu aşağıdaki gibi düzenle.
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
# Yayın anahtarı doğrulaması için HTTP endpoint çağrısı
on_publish http://127.0.0.1:8080/auth;
}
}
}
PHP Yüklü Değil ise PHP Kurulumu.
sudo apt install php php-cli php-fpmNginx Web Sunucusu ile PHP dahili Server'i çalıştır.
php -S 127.0.0.1:8080 -t /var/www/htmlBasit PHP Doğrulama API'si.
auth.php adlı dosyayı /var/www/html/auth.php gibi web sunucunun erişebileceği bir yere kaydet.
// İzin verilen yayın anahtarı (istediğin zaman değiştirebilirsin)
$valid_stream_key = "CANLI_YAYIN_TEST_KEY"; // Bunu istediğin anahtarla değiştir
// Nginx RTMP modülü, 'name' parametresiyle yayın anahtarını gönderir
$stream_key = $_GET['name'] ?? '';
// Anahtar doğrulama
if ($stream_key === $valid_stream_key) {
// Anahtar doğru
http_response_code(200);
echo "OK";
} else {
// Anahtar yanlış
http_response_code(403);
echo "Forbidden";
}
Basit Yayın Anahtarı doğrulama ile daha güvenli şekilde çalışabilirsiniz.
Umarım çalışmamı beğenmişsinizdir. Vakit ayırıp okuduğunuz için teşekkürler.