HLS (HTTP Live Streaming) - Müzik dosyaları küçük parçalar halinde stream edilir, tüm dosya indirilmez.
AES-128 Encryption - Her şarkı 128-bit anahtar ile şifrelenir, direkt erişim imkansız.
Token-based authentication - Her stream isteği için geçici token oluşturulur, paylaşım engellenir.
Throttling - Guest: 30/dakika, Üye: 120/dakika, Premium: 300/dakika istek limiti.
Üye olmayanlar ve normal üyeler sadece 30 saniye dinleyebilir, tam erişim premium üyelere özel.
Şarkı ilk kez istendiğinde otomatik HLS'e dönüştürülür, sunucu kaynaklarını optimize eder.
Henüz dinlenmemiş şarkılar HLS'e dönüştürülmemiş, ilk 30 saniye MP3 olarak serve ediliyor.
HLS dönüşmemişse MP3 dosyası direkt serve edilir, şifresiz erişim riski var.
HLSService /stream/key/{hash} kullanırken, ConvertToHLSJob /api/muzibu/songs/{id}/key kullanıyor.
HLSService'te TODO: Token validation + rate limiting ekle notu var, şu an sadece basic rate limit mevcut.
HLS: 60 dakika, MP3: 30 dakika. Guest/Normal user için çok uzun, paylaşım riski artırıyor.
30 saniye preview server-side olarak kontrol edilmiyor, client-side'a güveniliyor (manipüle edilebilir).
| Özellik | MP3 (Standart) | HLS + AES-128 (Güvenli) |
|---|---|---|
| Dosya İndirilebilir mi? | ✗ Evet, tüm dosya indirilebilir | ✓ Hayır, sadece şifreli parçalar |
| URL Paylaşımı | ✗ MP3 URL'si paylaşılabilir | ✓ Token geçersiz olur, paylaşılamaz |
| Hotlink Koruması | ✗ Yok | ✓ Var, her segment ayrı token |
| Şifreleme | ✗ Yok | ✓ AES-128 (128-bit key) |
| Preview Kontrolü | ✗ Client-side (manipüle edilebilir) | ✓ Server-side chunk kontrolü |
| DRM Entegrasyonu | ✗ İmkansız | ✓ Fairplay, Widevine eklenebilir |
| Kalite Kontrolü | ✗ Sabit kalite | ✓ Adaptif kalite (bant genişliğine göre) |
Sorun: Henüz HLS'e dönüşmemiş şarkılar MP3 olarak serve ediliyor. Üye olmayan kullanıcılar bile ilk 30 saniye için MP3 URL'sine erişebilir.
Risk: URL paylaşılırsa, kimlik doğrulaması olmadan tüm şarkı indirilebilir.
Çözüm: Tüm şarkıları proaktif olarak HLS + AES-128 ile dönüştür, MP3 fallback'i kaldır.
Sistemdeki tüm şarkıları proaktif olarak HLS + AES-128 ile dönüştür. Lazy conversion yerine, tüm kütüphane şifreli HLS formatında olmalı.
Nasıl Yapılır:
php artisan muzibu:convert-all-to-hlsWHERE hls_converted = 0Beklenen Sonuç: Tüm şarkılar şifreli HLS formatında, MP3 fallback ihtiyacı kalmayacak.
HLS dönüşmemişse MP3 serve etme, bunun yerine "Şarkı hazırlanıyor, lütfen bekleyin" mesajı göster. Kullanıcı beklerken HLS dönüşümü tamamlanır.
Değişiklik Yeri: SongStreamController.php - MP3 serve mantığını kaldır
Beklenen Sonuç: Hiçbir şarkı şifresiz olarak serve edilmeyecek.
HLSService ve ConvertToHLSJob farklı URL kullanıyor, tek bir standart endpoint belirle.
Önerilen URL: /api/muzibu/songs/{id}/key (mevcut API rotası)
api.muzibu.songs.encryption-key (zaten tanımlı)serveEncryptionKey() method'unu kontrol etBeklenen Sonuç: Tüm şarkılar aynı key endpoint'ini kullanacak, tutarsızlık kalmayacak.
Encryption key endpoint'ine ek güvenlik katmanları ekle.
Eklenecek Özellikler:
Beklenen Sonuç: Encryption key sadece yetkili stream istekleri için serve edilecek.
Kullanıcı tiplerine göre token sürelerini kısalt.
Değişiklik Yeri: SongStreamController.php - generateHlsUrl() ve generateStreamUrl() sürelerini user tipine göre ayarla
Beklenen Sonuç: Üye olmayan kullanıcılar token'ı paylaşsa bile kısa sürede geçersiz olacak.
30 saniye preview'ı client-side JavaScript'e değil, server-side'a taşı. Sadece ilk X chunk'ı serve et.
Nasıl Çalışır:
Beklenen Sonuç: JavaScript manipüle edilse bile, server sadece izin verilen chunk'ları serve edecek.
HLS dönüşümü tamamlandıktan sonra orijinal MP3 dosyasını sil, disk alanı tasarruf et ve güvenliği artır.
Dikkat: MP3'leri silersen, fallback imkansız hale gelir. Sadece tüm şarkılar HLS'e dönüştükten sonra uygula.
Alternatif: MP3'leri sil yerine, erişimini engelle (storage/muzibu/songs/ klasörüne web erişimini kapat).
Beklenen Sonuç: Disk alanı %40-50 azalır, orijinal dosyalara erişim tamamen engellenir.
Tüm şarkılar AES-128 ile şifreli, hiçbir dosya direkt indirilemez.
Signed URL'ler kısa sürede geçersiz olur, paylaşım işe yaramaz.
Guest/Normal: 30 saniye preview, Premium: Sınırsız dinleme.
JavaScript manipüle edilse bile, server izin verilen chunk'ları serve eder.
Encryption key sadece yetkili stream istekleri için verilir.
MP3'leri silerseniz %40-50 disk alanı kazanırsınız.
HLS dönüşümü için FFmpeg gerekli. Sistemde yüklü olduğundan emin olun:
HLS dönüşümü her şarkı için yaklaşık %20 daha fazla alan kullanır:
Bulk dönüşüm süresi şarkı sayısına ve sunucu gücüne bağlı: