v3 Değişiklik Özeti
3 bağımsız AI (Claude, Gemini CLI, GPT) tarafından denetlenmiş ve kod ile doğrulanmış güncellemeler:
v2'den Düzeltmeler
- "Rate limit yok" → ThrottleByUserType var (granüler eksik)
- XOR = obfuscation, şifreleme değil
- HLS Pool maxSize = 2 (raporda 3 denmişti)
- IV=0 high quality filtresi belgelendi
- DevTools IP toplama (KVKK riski)
v3'te Yeni
- G Grubu: Anti-Freeze (5 yeni madde)
- Gelecek Fazlar (2, 3, 4)
- Efor tahminleri (3 AI ortalaması)
- Tutarsızlıklar tek tablo ile düzeltildi
Doğrulanan (Kod ile)
- Tab Visibility API var (satır 7876)
- Gapless playback var (satır 2045)
- Blob URL cleanup var (satır 275-286)
- _nextTrackInProgress guard var
Kritik Bug: Şarkı Geçiş Sorunu
MÜŞTERİ ŞİKAYETİSorun Tanımı
Müşteri bildirimi: "Şarkı bittiğinde sonrakine geçmiyor"
Ek sorunlar: Şarkı yarıda kesilip diğerine geçiyor. Sonsuz döngü (continuous play) durduruluyor.
Geçiş Zinciri (player-core.js)
audio.onended veya timeupdate fallback (Safari)
Satır 2758 (HLS) — 5754-5796 (Safari: son 0.5 sn)
onTrackEnded() — 1 sn debounce
Satır 2964-3040
nextTrack(true) — _nextTrackInProgress guard + 300ms debounce
Satır 2011-2248. Gapless: fromNaturalEnd=true ise stopCurrentPlayback atlanır (satır 2045-2051)
Queue'da şarkı VAR → playSongFromQueue()
Queue BİTTİ → Genre refill (5 deneme, 20 offset). Başarısız = DURUR
Potansiyel Sebepler (7 Adet)
Genre API 404/500 veya genre_id null → geçiş durur. Duplikat filtre tüm şarkıları elerse boş yanıt.
Token expired → error recovery başarısız → sessizce durur.
MediaSource API sınırlaması → fatal error. HLS Pool maxSize: 2 (doğrulanmış).
Guard mevcut (satır 2021-2025) ama exception'da reset edilmezse kalıcı kilit. finally bloğu + zamanlayıcı gerekli.
timeupdate 0.5 sn penceresi kaçabilir. Tab Visibility API mevcut (satır 7876) ama throttle'a karşı ek koruma yok.
2 şarkı aynı anda aktif → 2 token isteği → race condition potansiyeli (30-60dk TTL ile azaltılmış).
_cleanupPreloadedNext() zamanlama sorunu. Blob URL cleanup mevcut (satır 275-286) ama stres testi gerekli.
Düzeltme Planı
Auto-refill: Genre → Popular → Shuffle Repeat. Hiçbir durumda DURMAMALI
_nextTrackInProgress: try/finally birincil + 10 sn zamanlayıcı son savunma
Stream 401: Token yenile → tekrar dene → başarısız = sonraki şarkı → tüm queue başarısız = bildirim
Geçiş loglama: serverLog entegrasyonu + debug panel transition logs
Karar: Soft Mode Aktivasyon
KESİNLEŞTİHibrit Strateji — Otomatik algılama + kullanıcı değiştirir
Otomatik Açılma
RAM ≤ 2GB veya bağlantı 2G
Öneri Göster
RAM < 4GB veya CPU < 4
Normal Mod
RAM ≥ 4GB, CPU ≥ 4, 3G+
Manuel Kontrol
Karar: Debug Mode
KESİNLEŞTİ?debug + Yetkili kullanıcı (ikisi birlikte)
?debug yok → dosya yüklenmez (root dahil). ?debug var + yetkisiz → yüklenmez. ?debug var + yetkili → panel aktif. Mobilde de çalışır.
Karar: HLS / MP3 / Otomatik
"Otomatik" Karar Ağacı
1. Soft Mode AKTİF? → Evet → MP3 2. HLS dönüştürme var mı? → Hayır → MP3 3. Cihaz HLS destekliyor mu? → Hayır → MP3 4. Hepsi OK → HLS
Kurumsal MP3 Eşiği
5+ üyeli kurum → otomatik MP3. Bireysel kullanıcı isterse kurumsal kararı EZER.
HLS Adaptive & Crossfade
HLS Variant'ları (HLSService.php satır 36-40)
| Seviye | Bitrate | Sample | Kanal |
|---|---|---|---|
| ultralow | 32 kbps | 22,050 Hz | Mono |
| low | 64 kbps | 22,050 Hz | Mono |
| mid | 128 kbps | 44,100 Hz | Stereo |
| high | Orijinal | 48,000 Hz | Stereo |
IV=0 Sorunu: High quality variant (orijinal bitrate) master.m3u8'den filtreleniyor (satır 729-738). IV=0x0000 hatası nedeniyle workaround uygulanmış. Premium kullanıcılar en yüksek kaliteden mahrum.
Soft Mode
Normal Mod
Crossfade
Şu An (Kod hazır, kapalı)
crossfadeEnabled: false, crossfadeDuration: 0 (satır 865-866)
Hedef
Normal: 5 sn | Soft Mode: 3 sn (daha az RAM overlap)
Kod İnceleme Düzeltmeleri
3 AI + KOD DOĞRULAMASIisPremium() + getSubscriptionData() Çift Sorgu
stream() metodunda satır 82'de isPremium() + satır 141/145'te getSubscriptionData() → aynı DB sorgusu 2 kez. Model-level check var ama stale durumda DB'ye gidiyor. Kazanç: ~5-15ms. Çözüm: Birleşik cache key user_{id}_subscription_data_tenant_{tenant_id}
Rate Limiting — Gerçek Durum
ThrottleByUserType middleware VAR: Guest stream 60/dk, Normal 200/dk, Premium 300/dk. Eksik olan: trackStart, trackHit, recent, popular için endpoint-spesifik granüler limitleme yok. Genel throttle var ama play_count şişirme hâlâ mümkün.
XOR = Obfuscation, Şifreleme DEĞİL
encryptStreamUrls() XOR + Base64 kullanıyor. Kod yorumu bile "obfuscation" diyor (satır 908). Asıl koruma: HLS AES-128 şifreleme. XOR sadece URL gizleme. Risk: Orta — reverse-engineer edilebilir ama HLS şifreleme asıl bariyeri sağlıyor.
DevTools IP Toplama — KVKK Riski
player-core.js satır 76-82: DevTools açıldığında api.ipify.org'dan IP alınıp console'a yazılıyor. KVKK/GDPR açısından değerlendirilmeli.
trackStart — Kısmi Queue
Play kaydı INSERT senkron (play_id döner), duplikat kontrolü + cache bust Job'da. Frontend trackHit/trackEnd play_id'ye bağımlı olduğu için tam queue RİSKLİ.
Faz 1 — TODO List (38 Madde)
Test: mztest.muzibu.com
A. Şarkı Geçiş Fix
EN YÜKSEK — Müşteri şikayeti | Efor: 3-5 gün
A1. Queue auto-refill: Genre → Popular → Shuffle Repeat
nextTrack() satır 2088-2247. Hiçbir durumda DURMAMALI.
A2. _nextTrackInProgress: try/finally + 10 sn zamanlayıcı
finally birincil, zamanlayıcı son savunma. Satır 2011.
A3. Stream 401 recovery
Token yenile → retry → sonraki şarkı → bildirim
A4. Geçiş loglama + debug panel entegrasyonu
serverLog + transition logs
A5. Şarkı yarıda kesilme koruması
Preload/crossfade race condition. Blob URL cleanup stres testi.
ABA Test
🎯 Şarkı Geçiş Testi 1. Premium hesapla 5 şarkı doğal bitiş + 5 skip 2. Queue sonuna ulaş → auto-refill doğrula 3. Hızlı skip testi: 10 şarkıyı 2 sn arayla skip et 4. Console'da critical error YOK ✅ Her geçiş < 3 sn, yarıda kesilme YOK, queue otomatik dolmalı
B. Debug Mode Yönetimi
YÜKSEK — 180 KB tasarruf | Efor: 0.5-1 gün
B1. ?debug + yetki koşullu yükleme
app.blade.php → @if(request()->has('debug') && $isDebugAllowed)
B2. Mobil responsive debug panel
Touch-friendly, responsive CSS
B3. Admin panel debug toggle + süre
1 saat, 1 gün, 1 hafta seçenekleri
C. API Cache & Performans
YÜKSEK | Efor: 3-6 gün
C1. isPremium + getSubscriptionData birleşik cache (2 saat)
Tek key, mevcut Cache::forget uyumlu. Kazanç: ~5-15ms.
C2. recent/popular/lastPlayed cache
recent: 5dk, popular: 30dk, lastPlayed: 5dk. Bust: trackStart.
C3. trackStart kısmi queue
INSERT senkron, diğerleri async Job.
C4. HLS playlist ham dosya cache
Redis'e ham dosya, regex her seferinde. Kazanç: %30-40.
C5. Granüler rate limiting
trackStart: 60/dk, trackHit: 120/dk, recent: 30/dk, popular: 20/dk. ThrottleByUserType var ama endpoint-spesifik yok!
D. Format & Soft Mode (Migration Gerekli)
ORTA — 3 aşamalı onay! | Efor: 5-10 gün
D1. Migration: users → audio_preference, soft_mode
D2. Migration: corporate_accounts → audio_preference, soft_mode
D3. ENV: MUZIBU_DEFAULT_AUDIO_FORMAT + SOFT_MODE
D4. Settings: corporate_mp3_threshold (admin ayarlı)
D5. resolveAudioFormat($user) — 4 katmanlı hiyerarşi + eşik
D6. resolveSoftMode($user)
D7. Frontend: detectDeviceCapability()
D8. Frontend: Soft Mode öneri toast
D9. UI: Player ayarlar + Soft Mode toggle
D10. UI: Profil → Çalma Modu
D11. UI: Kurumsal panel format ayarı
E. Crossfade Aktivasyonu
ORTA — Kod hazır | Efor: 1-2 gün
E1. Backend'den crossfade config gönder (Normal: 5s, Soft: 3s)
E2. Frontend crossfade toggle (satır 865-866 dinamik)
E3. Soft Mode + crossfade entegrasyonu
E4. Player UI crossfade toggle
F. Sonsuz Çalma Koruması
YÜKSEK — "Gün boyu çalsın" | Efor: 4-8 gün
F1. Queue refill: Genre → Popular → Random → Repeat
F2. Arka plan tab koruması (Web Worker)
F3. Session keepalive (periyodik ping)
F4. Memory leak temizliği (Howl/HLS/Blob)
G. Anti-Freeze (Donma Önleme)
v3'TE YENİYÜKSEK — Soft Mode'un temel amacı | Efor: 4-6 gün
G1. Code splitting: Soft Mode'da HLS.js yüklenmemesi
140 KB JS parse tasarrufu. Dynamic import ile: if (format !== 'mp3') import('hls.js')
G2. Speed tester kısıtlaması
Soft Mode'da TAMAMEN KAPAT. Normal'de 10MB → 1MB, otomatik tetikleme kaldır. Yavaş internette bant genişliğini tüketiyor.
G3. Error boundaries (hata izolasyonu)
speed-tester, device-profiler, buffer-monitor, tracking → her biri try-catch ile sarılsın. Biri çökse player çalmaya devam etsin.
G4. Blob URL cleanup stres testi + fix
Hızlı skip senaryosunda (20 şarkı art arda) Blob birikimi kontrolü. activeBlobUrls (satır 275-286) audit.
G5. Web Worker: device-profiler ana thread'den kaldır
Sayfa açılışında 100-300ms ana thread bloklaması. Worker'a taşınırsa açılış donması yok.
ABA Test — Anti-Freeze
🎯 Anti-Freeze & Soft Mode Dayanıklılık Testi 1. Düşük RAM simülasyonu (DevTools → Performance → throttle) 2. Soft Mode'da HLS.js network request YOK (140KB tasarruf) 3. Speed tester Soft Mode'da tetiklenmiyor 4. 20 şarkıyı hızlı skip et → bellek artışı < 30MB 5. device-profiler ana thread'i bloklamıyor (Performance tab) 6. speed-tester veya tracking çökerse player çalmaya devam ediyor ✅ Soft Mode'da toplam JS < 300KB, açılış donması YOK
Faz 1 — Uygulama Sırası & Efor
| Sıra | İş | Kalem | Migration | Efor |
|---|---|---|---|---|
| 1 | A Şarkı Geçiş Fix | 5 | Hayır | 3-5 gün |
| 2 | B Debug koşullu yükleme | 3 | Hayır | 0.5-1 gün |
| 3 | G Anti-Freeze | 5 | Hayır | 4-6 gün |
| 4 | C API Cache + Rate Limit | 5 | Hayır | 3-6 gün |
| 5 | E Crossfade | 4 | Hayır | 1-2 gün |
| 6 | F Sonsuz Çalma | 4 | Hayır | 4-8 gün |
| 7 | D Format & Soft Mode | 11 | EVET | 5-10 gün |
| FAZ 1 TOPLAM | 38 | 4 migration | ~21-38 gün | |
Gelecek Fazlar — Yol Haritası
3 AI ÖNERİSİFaz 2 — Mimari İyileştirme
Faz 1 bittikten sonra | Tahmini efor: 10-17 gün
8.310 satırlık tek dosya → core/ (state, engine, queue, controls) + features/ (crossfade, preloader, tracking, soft-mode) + services/ (hls-pool, signed-url, api-client). Vite/esbuild ile bundle.
10MB hız testi ve JSON serialize → Worker'da. Ana thread'i hiç bloklamaz.
master.m3u8'den high variant filtreleniyor → premium kullanıcılar orijinal kaliteden mahrum. IV üretim sürecindeki hata düzeltilmeli.
api.ipify.org IP toplama → KVKK/GDPR onay gerekli mi, kaldırılmalı mı?
Faz 3 — Gözlemlenebilirlik & Performans
Faz 2 sonrası | Tahmini efor: 7-12 gün
stream_start_ms, buffer_stall_count, hls_fatal_error, crossfade_success_rate, queue_refill_failure → admin panelde dashboard. Hata sınıflandırma: network/codec/auth/buffer.
Adım 1: JS/CSS/görseller cache (Workbox). Adım 2: Şarkı metadata + playlist stale-while-revalidate.
MediaSource.isTypeSupported() ile proaktif codec kontrolü. Eski Android AAC sorununu önceden yakala.
Şarkılar arası ses seviyesi farkını ortadan kaldır. Web Audio API → GainNode. Spotify, Apple Music, YouTube Music hepsi kullanıyor.
Faz 4 — Premium Özellikler
Uzun vade | Tahmini efor: 40-70 gün
Son dinlenen 10 şarkı offline. HLS şifreli → MP3 fallback ile. Push notification "yeni albüm".
WebSocket/BroadcastChannel ile kuyruk senkronizasyonu. "Başka cihazda devam et" (Spotify Connect benzeri).
Web Audio API ile bass boost, vocal enhance. AudioContext altyapısı normalization ile birlikte.
AES-128 + XOR yerine Widevine (Chrome/Android) + FairPlay (Safari/iOS). Endüstri standardı DRM.
Toplam Efor Haritası
| Faz | Kapsam | Madde | Efor |
|---|---|---|---|
| Faz 1 | Bug fix + Optimize + Format + Soft Mode | 38 | 21-38 gün |
| Faz 2 | Modüler yapı + Worker + IV=0 fix | 4 | 10-17 gün |
| Faz 3 | Telemetry + Service Worker + Normalization | 4 | 7-12 gün |
| Faz 4 | Offline + Multi-device + EQ + DRM | 4 | 40-70 gün |
| TÜM FAZLAR | 50 madde | ~78-137 gün | |