Sorun tespiti, kök neden analizi, uygulanan çözüm ve production kontrol rehberi
Her şarkı dinlenirken şifreleme anahtarı (key) ile korunan parçalara bölünüyor. Farklı internet hızlarına göre 4 kalite seviyesi var: ultralow (çok düşük), low (düşük), mid (orta) ve high (yüksek/orijinal).
Sorun: Bazı şarkılarda yüksek kalite parçaları yeni anahtarla, düşük kalite parçaları ise eski anahtarla şifrelenmiş. Player düşük kaliteye geçmeye çalışınca eski anahtarla şifreli parçaları çözemez → şarkı durur veya hata verir.
Çözüm: Etkilenen şarkıların düşük kalite parçaları doğru anahtarla yeniden oluşturuldu. Ayrıca bu sorunun tekrar olmaması için koruma eklendi.
Production: Gerçek sunucuda bu sorun olup olmadığı henüz bilinmiyor. Kontrol komutu hazır — aşağıda.
random_bytes(16) → yeni enc.bin oluşturur ❌ Sorun buradaaddVariantsToExisting() → variant "zaten var" → ATLAR
ConvertToHLSJob (1. çalışma)
├── enc.bin → KEY_A oluştur
├── high segment'ler → KEY_A ile şifrele ✅
└── variant'lar → KEY_A ile şifrele ✅ (hepsi aynı key)
ConvertToHLSJob (2. çalışma — TEKRAR)
├── enc.bin → KEY_B oluştur ❌ YENİ KEY!
├── high segment'ler → KEY_B ile şifrele ✅ (yeni key)
└── variant'lar → "zaten var" → ATLA ❌ (hâlâ KEY_A ile şifreli!)
HLS.js oynatırken:
├── enc.bin → KEY_B okur
├── high segment → KEY_B ile çözer ✅
└── low segment → KEY_B ile çözmeye çalışır
└── KEY_A ile şifreli → ÇÖZEMEZ ❌ fragParsingError
ConvertToHLSJob.php
enc.bin zaten varsa yeni key oluşturma → mevcut key'i koru
HLSService.php → generateVariant()
$force parametresi eklendi — mevcut variant'ı silip yeniden oluşturabilir
AddHlsVariantsCommand.php
--fix-key-mismatch seçeneği — timestamp kontrolü + force yeniden oluşturma
~1.5 dk/şarkı — 239 şarkı ≈ 6 saat
Production'da bu sorunun olma ihtimali düşük — sorun sadece
ConvertToHLSJob tekrar çalıştırıldığında oluşur. İlk defa dönüştürülen
şarkılarda sorun olmaz.
HLS_DIR="storage/tenant*/app/public/muzibu/hls"
total=0; mismatch=0
for dir in $HLS_DIR/*/; do
[ ! -f "$dir/enc.bin" ] && continue
total=$((total + 1))
enc_t=$(stat -c '%Y' "$dir/enc.bin")
for v in low ultralow mid; do
[ ! -f "$dir/$v/segment-000.ts" ] && continue
v_t=$(stat -c '%Y' "$dir/$v/segment-000.ts")
[ $((enc_t - v_t)) -gt 60 ] && { mismatch=$((mismatch+1)); break; }
done
done
echo "Toplam: $total | Uyumsuz: $mismatch"
Sonuç 0 ise: Sorun yok, hiçbir şeye dokunma.
Sonuç > 0 ise: Önce dry-run, sonra tek şarkı test, sonra toplu fix.
Artık ConvertToHLSJob tekrar çalışsa bile mevcut enc.bin korunur → variant'larla key uyumu bozulmaz.