📋 Planlama Sonraki Faz

🔐 HLS Şifreleme Sistemi - Gelecek Faz Planı

Muzibu Müzik Platformu - AES-128 Şifreleme Uygulaması

📅 11 Ocak 2026 🎵 28,203 HLS Dosyası ⏱️ ~6 Saat İşlem Süresi

📝 Basit Anlatım (Herkes İçin)

Ne Yaptık?

Müzik dosyalarını çalmak için kullandığımız HLS (parçalı müzik sistemi) dosyalarına şifreleme sistemi ekledik. Artık yeni eklenen şarkılar otomatik olarak şifreli HLS dosyası olarak kaydediliyor.

Neden Önemli?

  • 🔒 Müzik dosyalarını kopyalamak zorlaşır
  • 🛡️ İçerik koruması sağlanır
  • 💰 Premium sistemi için altyapı hazır olur
  • ⚡ İleride kullanıcı bazlı erişim kontrolü eklenebilir

Şu Anda Ne Durumda?

  • ✅ Şifreleme sistemi yazıldı ve test edildi
  • ✅ Yeni eklenen şarkılar otomatik şifreleniyor
  • ⏸️ Mevcut 28,203 şarkı hala şifresiz (karar bekleniyor)
  • ⏸️ Yetkilendirme sistemi henüz eklenmedi (sonraki aşama)

Ne Karar Vereceğiz?

Mevcut 28,203 şarkının HLS dosyalarını yeniden oluşturup şifreleyecek miyiz? Bu işlem yaklaşık 6 saat sürecek ve tüm HLS dosyalarını yeniden üretecek.

🔧 Teknik Detaylar (Geliştiriciler İçin)

Şifreleme Yöntemi:

  • Algoritma: AES-128 (Symmetric Encryption)
  • Key Size: 16 bytes (128 bit)
  • IV: Default (0x00000000000000000000000000000000)
  • Encryption Timing: FFmpeg encoding sırasında (post-processing değil!)

Oluşturulan Dosyalar:

  • storage/muzibu/hls/[song_id]/enc.key - 16 byte encryption key
  • storage/muzibu/hls/[song_id]/enc.keyinfo - FFmpeg key info (geçici)
  • storage/muzibu/hls/[song_id]/playlist.m3u8 - #EXT-X-KEY tag ile
  • storage/muzibu/hls/[song_id]/segment-*.ts - AES-128 encrypted segments

Değişen Dosya:

Modules/Muzibu/app/Jobs/ConvertToHLSJob.php

  • Line 82-145: Encryption key generation eklendi
  • FFmpeg parametresi: -hls_key_info_file eklendi
  • Key URI format: https://muzibu.com/storage/muzibu/hls/[song_id]/enc.key

FFmpeg Komutu (Değişiklik):

// ESKI (Şifresiz):

ffmpeg -i input.mp3 -map 0:a -c:a aac -b:a 128k -hls_time 10 -f hls playlist.m3u8

// YENİ (Şifreli):

ffmpeg -i input.mp3 -map 0:a -c:a aac -b:a 128k -hls_key_info_file enc.keyinfo -hls_time 10 -f hls playlist.m3u8

Playlist Örneği (m3u8):

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://muzibu.com/storage/muzibu/hls/10000/enc.key",IV=0x00000000000000000000000000000000
#EXTINF:10.005333,
segment-000.ts
#EXTINF:9.994667,
segment-001.ts
#EXT-X-ENDLIST

📊 Mevcut Durum

✅ Tamamlanan İşlemler
  • • ConvertToHLSJob.php şifreleme kodu eklendi
  • • Encryption key generation sistemi hazır
  • • FFmpeg parametreleri güncellendi
  • • Test edildi ve çalıştığı doğrulandı (song 13512)
  • • Horizon worker'lar yeni kod ile çalışıyor (202 worker)
  • • Yeni şarkılar otomatik şifrelenmeye başladı
⏸️ Bekleyen İşlemler
  • • 28,203 mevcut HLS dosyası hala şifresiz
  • • Yetkilendirme sistemi (middleware) eklenmedi
  • • Premium kullanıcı kontrolü yok
  • • Enc.key URL'leri herkese açık (henüz)
  • • Re-encoding kararı verilmedi (~6 saat)
28,203
Toplam HLS Dosyası
1
Şifreli HLS (Test)
~6 saat
Tahmini İşlem Süresi

🚀 Sonraki Faz Adımları

1

Karar Verme: Mevcut HLS'leri Yeniden Şifrele

28,203 şarkının HLS dosyalarını şifreli olarak yeniden üretmek gerekecek.

İşlem Adımları:

  • Tüm HLS klasörlerini sil: storage/tenant1001/app/public/muzibu/hls/*/
  • Database'de hls_path kolonunu NULL yap (28,203 kayıt)
  • 28,203 ConvertToHLSJob dispatch et (queue'ye at)
  • Horizon monitoring ile takip et
  • Tahmini süre: ~6 saat (135 worker ile)

⚠️ Risk:

  • • 6 saat boyunca site yavaşlayabilir (Horizon yoğunluğu)
  • • Bazı MP3 dosyaları silinmiş olabilir (HLS üretilemez)
  • • İşlem sırasında bazı şarkılar geçici olarak çalışmayabilir
2

Yetkilendirme Sistemi (Middleware)

Enc.key dosyalarına erişimi kontrol eden middleware ekle.

Yapılacaklar:

  • Middleware oluştur: CheckHLSKeyAccess.php
  • Route ekle: GET /storage/muzibu/hls/{song_id}/enc.key
  • Kontroller:
    • Kullanıcı giriş yapmış mı?
    • Premium aboneliği var mı?
    • Rate limiting (DDoS koruması)
    • IP bazlı kara liste
  • Response: Binary key file (16 bytes)

Örnek Kod:

Route::get('/storage/muzibu/hls/{songId}/enc.key', function ($songId) {
    // Kullanıcı kontrolü
    if (!auth()->check()) {
        abort(401, 'Unauthorized');
    }

    // Premium kontrolü (isteğe bağlı)
    if (!auth()->user()->isPremium()) {
        abort(403, 'Premium membership required');
    }

    // Key dosyasını döndür
    $keyPath = storage_path("app/public/muzibu/hls/{$songId}/enc.key");
    return response()->file($keyPath);
})->middleware(['web', 'auth', 'throttle:60,1']);
3

Premium Kullanıcı Kontrolü

Ücretsiz kullanıcılara düşük kalite, premium kullanıcılara tam kalite HLS sun.

Strateji:

  • Ücretsiz: 64kbps AAC HLS (şifresiz veya şifreli, enc.key açık)
  • Premium: 320kbps AAC HLS (şifreli, enc.key middleware korumalı)
  • Player'da otomatik kalite seçimi (kullanıcı durumuna göre)
  • Database: hls_path_low ve hls_path_high kolonları ekle
4

Monitoring & Analytics

Enc.key erişim logları ve şüpheli aktivite takibi.

Takip Edilecekler:

  • Enc.key istekleri (IP, kullanıcı, timestamp)
  • Şüpheli aktivite: Çok fazla key isteği (scraping)
  • Başarısız yetkilendirme denemeleri
  • Günlük/haftalık rapor (Dashboard widget)

⚠️ Önemli Notlar ve Riskler

❌ Post-Encryption ÇALIŞMAZ!

Mevcut şifresiz .ts dosyalarının üstüne enc.key eklemek işe yaramaz. Şifreleme FFmpeg encoding sırasında yapılmalı. Test folder 10000'de bu kanıtlandı (fake encryption).

🔄 Re-Encoding Zorunlu

28,203 HLS dosyasını şifrelemek için tek yol: Tüm HLS'leri silip yeniden üretmek (~6 saat süre).

🗑️ Silinen MP3'ler

Bazı şarkıların MP3 dosyaları silinmiş olabilir. Bu şarkılar için HLS üretilemeyecek. Manuel kontrol gerekebilir.

⚡ Sistem Yükü

28,203 job aynı anda queue'ye girecek. Horizon 135 worker ile sürekli çalışacak. Site performansı geçici olarak etkilenebilir.

🔒 Enc.Key Erişimi

Şu anda enc.key dosyaları herkese açık URL'de. Middleware eklenmeden gerçek koruma sağlanmaz. Sadece content scraping zorlaşır.

🎯 Horizon Restart

Kod değişikliğinden sonra mutlaka Horizon restart gerekli. Eski worker'lar eski kodu çalıştırır!

🧪 Test Sonuçları

Test 1: Yeni HLS Şifreleme (Song 13512) - BAŞARILI
  • • ConvertToHLSJob dispatch edildi
  • • enc.key (16 bytes) oluşturuldu
  • • enc.keyinfo oluşturuldu
  • • playlist.m3u8 #EXT-X-KEY tag'i eklendi
  • • 16 segment .ts dosyası şifreli üretildi
  • • Test klasörü sonradan temizlendi
Test 2: Post-Encryption (Folder 10000) - BAŞARISIZ
  • • Mevcut şifresiz HLS'e enc.key eklendi
  • • playlist.m3u8'e #EXT-X-KEY tag'i eklendi
  • • SONUÇ: .ts dosyaları şifrelenmediği için çalışmaz
  • • Player .ts'leri decrypt etmeye çalışır → hata/garbled audio
  • • Folder 10000 "fake encrypted" olarak bırakıldı (inceleme için)
ℹ️ Sonuç: FFmpeg Encoding Şart

Şifreleme mutlaka FFmpeg encoding sırasında yapılmalı. Post-processing olarak enc.key eklemek işe yaramaz. Re-encoding zorunlu.

🎯 Karar Noktaları

1️⃣ 28,203 HLS'i Şimdi Mi Şifreleyelim?

✅ EVET

  • • Tüm içerik korunur
  • • Premium sistemi hazır olur
  • • ~6 saat bekle, işlem bitsin

❌ HAYIR

  • • Eski şarkılar şifresiz kalır
  • • Sadece yeni şarkılar şifreli
  • • İsteğe bağlı: İleride yapılabilir

2️⃣ Yetkilendirme Sistemini Ne Zaman Ekleyelim?

  • Öncelik 1: Re-encoding bittikten sonra (şifreleme tamamlanınca)
  • Öncelik 2: Premium sistemi aktif edilmeden önce
  • Tavsiye: Şifreleme + Yetkilendirme aynı anda deploy edilebilir

3️⃣ Premium Kalite Farklılaştırması?

  • Seçenek 1: Ücretsiz 64kbps, Premium 320kbps (iki HLS versiyonu)
  • Seçenek 2: Ücretsiz 30 saniye preview, Premium tam şarkı
  • Seçenek 3: Ücretsiz reklam arası, Premium reklamsız (gelecek özellik)