Genel Bakış
31 maddenin ~25'i tamamlandı. Kalan: keyLoadError fix + batch + crossfade + 3 ekstra madde.
Tamamlanan İşler
Kod yazıldı, test edildi, canlıda çalışıyor.
A. Şarkı Geçiş Fix
TAMAMLANDIB. Debug Mode
TAMAMLANDIG. Donma Önleme
TAMAMLANDIC. API Hızlandırma
TAMAMLANDIF. Sonsuz Çalma
TAMAMLANDID. Format & Soft Mode Altyapısı
D1-D6 TAMAMLANDIHLS Sistemi — Yapılan İşler
HLS altyapısında büyük iyileştirmeler yapıldı. Birçok sorun çözüldü.
Çözülen Sorunlar
ConvertToHLSJob.php'ye bin2hex(random_bytes(16)) eklendi. Rastgele IV ile şifreleme artık düzgün çalışıyor.
Storage URL rewrite kaldırıldı → relative path + /hls/ endpoint üzerinden sunuluyor. Dosya izinleri mztest:psacln yapıldı.
HLSService.php'de EXTINF süresi kullanılıyor (önceki CHUNK_DURATION sabit değer hatası düzeltildi).
SongStreamController'daki high filtre kaldırıldı. Artık 4 kalite seviyesi mevcut.
IV + 6sn segment + doğru master.m3u8 ile 66 şarkı yeniden dönüştürüldü. 5 aktif, 61 deaktif (batch bekliyor).
4 kalite seviyesi: ultralow (32kbps/4sn), low (64kbps/4sn), mid (128kbps/4sn), high (orijinal/6sn). Master.m3u8 doğru oluşturuluyor.
Tüm variant'lar aynı key URI kullanıyor (&level= parametresi kaldırıldı). HLS.js keyUriToKeyInfo cache'i tek key ile çalışıyor.
HLSService::generateMp3128() + ConvertToHLSJob'a entegre + hls:add-variants --mp3-128 komutu.
SignedUrlService::generateAudioCdnUrl() — Cloudflare cache dostu path-based signed URL: /audio/songs/{id}/{expires}/{sig}
Değiştirilen Dosyalar
Kritik Sorun: keyLoadError (ÇÖZÜLEMEDI)
HLS şarkı çalarken "decryptdata unset or changed" hatası. Şarkılar MP3 fallback ile çalıyor ama HLS modunda çalışmıyor.
Ne Oluyor? (Basit)
Şarkıyı çalmak için önce şifresini çözmesi gerekiyor. Anahtar (key) başarıyla indiriliyor. Ama indirme süresi boyunca (300-600ms) başka bir işlem şifre bilgilerini sıfırlıyor. Anahtar döndüğünde "eşleşmiyor" diyor ve çöküyor. Sonuç olarak sistem MP3'e geçiyor ve şarkı çalıyor — ama HLS'in avantajları (kalite geçişi, daha az data) kullanılamıyor.
Bulunan Kök Nedenler (3 Katmanlı)
self.hls Alpine store'da tutuluyor. self.hls.currentLevel = 3 ataması
Alpine'ın reaktif proxy'sinden geçiyor. Bu, HLS.js'nin iç setter'larını da proxy'e sokuyor → 4x zincirleme kaskad.
Kaskad nedeniyle HLS.js aynı fragment için iki eşzamanlı yükleme başlatıyor. İkinci çağrı decryptdata'yı sıfırlıyor → key XHR dönünce null buluyor → FATAL hata.
Cache'den senkron key serve etme kodu tasarlandı ama hiç yazılmadı.
prefetch-warm=true logu çıkıyor ama yine XHR yapıyor. Cache var, kullanılmıyor.
Denenen Ama İşe Yaramayan Çözümler
| Denenen | Neden İşe Yaramadı |
|---|---|
autoLevelCapping = 3 |
Sadece üst limit, ABR hala level düşürebiliyor |
currentLevel = 3 (MANIFEST_PARSED) |
Sorunun kaynağı — Alpine kaskadı tetikliyor |
autoStartLoad: false |
Faydalı ama tek başına yetersiz |
| CachingKeyLoader (memory cache) | Cache-serve kodu yazılmadı, hep XHR yapıyor |
Promise.resolve().then() cache serve |
Microtask bile race condition'ı önleyemedi |
| loadSource() recovery | Aynı kodu çalıştırıyor → aynı hata |
| Key URI birleştirme (level parametresi kaldırma) | Doğru yönde ama Alpine kaskadı devam ediyor |
Önerilen Çözüm Yaklaşımları (Henüz Uygulanmadı)
HLS.js instance'ını ham JavaScript değişkeninde tut. Alpine proxy geçmesin → kaskad oluşmasın.
startLevel: 3 config'i zaten var. MANIFEST_PARSED'daki atama gereksiz ve sorun kaynağı.
Prefetch edilen key'i senkron olarak serve et. XHR yok → async delay yok → race condition yok.
key-loader.ts refactor edilmiş olabilir. Changelog incelenip karar verilecek.
Bekleyen İşler
keyLoadError'a bağlı veya bağımsız bekleyen maddeler.
keyLoadError Çözülmeden Yapılamaz
Mid variant + MP3 128k eklenmesi gerekiyor. Komut hazır: hls:add-variants --quality=all --mp3-128. Şu an is_active=0 ile deaktif.
Batch bittikten sonra UPDATE muzibu_songs SET is_active=1 çalıştırılacak.
Kod tamamen hazır. HLS keyLoadError çözülmeden açılamaz — iki HLS instance çakışması riski.
muzibu.com'daki tüm şarkıların yeni format + variant ile yeniden dönüştürülmesi. Test ortamında sorun çözülmeden production'a geçilemez.
Bağımsız Bekleyen Maddeler
MP3 modundaki kullanıcılar için 128kbps düşük kalite MP3 sunulacak. generateMp3128() metodu hazır, batch sırasında üretilecek.
Admin panelden kullanıcıya soft_player modu atanabilsin. Migration gerekli — users tablosuna soft_player alanı (3 aşamalı onay).
Player bar üstünde, ortada, WiFi ikonu animasyonlu badge. Yavaş bağlantı algılandığında görünecek.
Mevcut Sistem Durumu
Çalışan
- MP3 fallback — tüm şarkılar MP3 olarak çalıyor
- Şarkı geçişleri — sorunsuz çalışıyor
- Sıra doldurma — hiç boş kalmıyor
- Debug paneli — ?debug ile açılıyor
- Format seçimi — Admin > Kurumsal > Sistem zinciri
- HLS segment servisi — /hls/ endpoint çalışıyor
- Key servisi — /hls-key/ endpoint imza doğrulaması
- 4 kalite seviyesi master.m3u8'de mevcut
Çalışmayan
- HLS playback — keyLoadError FATAL hatası
- Adaptive bitrate — HLS çalışmadığı için test edilemez
- Crossfade — HLS'e bağlı, kapalı
- 61 şarkı deaktif (is_active=0) — batch bekliyor
Veritabanı Durumu (tenant_muzibu_1528d0)
İlgili Raporlar & Dokümanlar
Özet Tablo
| Grup | Konu | Madde | Durum |
|---|---|---|---|
| A | Şarkı Geçiş Fix | 5 | TAMAMLANDI |
| B | Debug Mode | 3 | TAMAMLANDI |
| C | API Hızlandırma | 5 | TAMAMLANDI |
| D | Format & Soft Mode | 6+2 | D1-D6 OK / D7-D8 BEKLİYOR |
| E | Crossfade | 3 | BLOKE (keyLoadError) |
| F | Sonsuz Çalma | 4 | TAMAMLANDI |
| G | Donma Önleme | 5 | TAMAMLANDI |
| HLS | keyLoadError Fix | 1 | ÇÖZÜLEMEDI |
| BATCH | 61 Şarkı Re-encode + Activate | 2 | BLOKE |
| UI | Yavaş Bağlantı Badge | 1 | BAŞLANMADI |