Tüm Raporlar / Uygulama Planı

Kapsamlı Uygulama Planı & TODO

Tüm kararlar, iş kalemleri, gelecek fazlar ve ABA test senaryoları

v3 — 3 AI Denetimli 21 Şubat 2026 Şarkı Geçiş Sorunu Soft Mode Format Seçimi Test: mztest.muzibu.com

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)

1

audio.onended veya timeupdate fallback (Safari)

Satır 2758 (HLS) — 5754-5796 (Safari: son 0.5 sn)

2

onTrackEnded() — 1 sn debounce

Satır 2964-3040

3

nextTrack(true) — _nextTrackInProgress guard + 300ms debounce

Satır 2011-2248. Gapless: fromNaturalEnd=true ise stopCurrentPlayback atlanır (satır 2045-2051)

4a

Queue'da şarkı VAR → playSongFromQueue()

4b

Queue BİTTİ → Genre refill (5 deneme, 20 offset). Başarısız = DURUR

Potansiyel Sebepler (7 Adet)

YÜKSEK1. Queue auto-refill başarısız

Genre API 404/500 veya genre_id null → geçiş durur. Duplikat filtre tüm şarkıları elerse boş yanıt.

YÜKSEK2. Stream 401/403 (oturum düştü)

Token expired → error recovery başarısız → sessizce durur.

ORTA3. HLS bufferAppendError (eski cihaz)

MediaSource API sınırlaması → fatal error. HLS Pool maxSize: 2 (doğrulanmış).

ORTA4. _nextTrackInProgress kilidi

Guard mevcut (satır 2021-2025) ama exception'da reset edilmezse kalıcı kilit. finally bloğu + zamanlayıcı gerekli.

DÜŞÜK5. Safari arka plan tab throttle

timeupdate 0.5 sn penceresi kaçabilir. Tab Visibility API mevcut (satır 7876) ama throttle'a karşı ek koruma yok.

DÜŞÜK6. Crossfade timeout yarışı + token race condition

2 şarkı aynı anda aktif → 2 token isteği → race condition potansiyeli (30-60dk TTL ile azaltılmış).

DÜŞÜK7. Preload race condition

_cleanupPreloadedNext() zamanlama sorunu. Blob URL cleanup mevcut (satır 275-286) ama stres testi gerekli.

Düzeltme Planı

FIX-1

Auto-refill: Genre → Popular → Shuffle Repeat. Hiçbir durumda DURMAMALI

FIX-2

_nextTrackInProgress: try/finally birincil + 10 sn zamanlayıcı son savunma

FIX-3

Stream 401: Token yenile → tekrar dene → başarısız = sonraki şarkı → tüm queue başarısız = bildirim

FIX-4

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

Sormadan AÇ

Öneri Göster

RAM < 4GB veya CPU < 4

Toast → "Etkinleştir"

Normal Mod

RAM ≥ 4GB, CPU ≥ 4, 3G+

Mevcut davranış

Manuel Kontrol

Player bar: Dişli ikonu → "Hafif Mod" switch → anında geçiş
Profil: /profile/settings → kalıcı tercih

Karar: Debug Mode

KESİNLEŞTİ
KURAL

?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.

@if(request()->has('debug') && $isDebugAllowed)
<script src="/themes/muzibu/js/player/features/performance-debug.js"></script>
@endif

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

Varsayılan
5 üye
Ayar Yeri
Admin Panel (Settings)
Key
corporate_mp3_threshold

5+ üyeli kurum → otomatik MP3. Bireysel kullanıcı isterse kurumsal kararı EZER.


HLS Adaptive & Crossfade

HLS Variant'ları (HLSService.php satır 36-40)

SeviyeBitrateSampleKanal
ultralow32 kbps22,050 HzMono
low64 kbps22,050 HzMono
mid128 kbps44,100 HzStereo
highOrijinal48,000 HzStereo

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
32 kbps
autoLevelCapping = 0 SABİT
Normal Mod
128 kbps
mid başlangıç → ABR serbest

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ĞRULAMASI

isPremium() + 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İşKalemMigrationEfor
1A Şarkı Geçiş Fix5Hayır3-5 gün
2B Debug koşullu yükleme3Hayır0.5-1 gün
3G Anti-Freeze5Hayır4-6 gün
4C API Cache + Rate Limit5Hayır3-6 gün
5E Crossfade4Hayır1-2 gün
6F Sonsuz Çalma4Hayır4-8 gün
7D Format & Soft Mode11EVET5-10 gün
FAZ 1 TOPLAM384 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

F2-1player-core.js Modülerleştirme5-10 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.

F2-2Web Worker: speed-tester + tracking payload2-3 gün

10MB hız testi ve JSON serialize → Worker'da. Ana thread'i hiç bloklamaz.

F2-3HLS high quality IV=0 kalıcı çözümü2-3 gün

master.m3u8'den high variant filtreleniyor → premium kullanıcılar orijinal kaliteden mahrum. IV üretim sürecindeki hata düzeltilmeli.

F2-4DevTools IP toplama KVKK değerlendirmesi0.5 gün

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

F3-1Client-Side Telemetry Dashboard3-5 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.

F3-2Service Worker — Statik Asset + API Cache2-4 gün

Adım 1: JS/CSS/görseller cache (Workbox). Adım 2: Şarkı metadata + playlist stale-while-revalidate.

F3-3Audio Codec Desteği Tespiti0.5 gün

MediaSource.isTypeSupported() ile proaktif codec kontrolü. Eski Android AAC sorununu önceden yakala.

F3-4Loudness Normalization (ReplayGain/R128)3-5 gün

Ş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

F4-1Offline / Download (PWA)10-15 gün

Son dinlenen 10 şarkı offline. HLS şifreli → MP3 fallback ile. Push notification "yeni albüm".

F4-2Çoklu Cihaz Senkronizasyonu10-20 gün

WebSocket/BroadcastChannel ile kuyruk senkronizasyonu. "Başka cihazda devam et" (Spotify Connect benzeri).

F4-3Equalizer / Audio Effects5-8 gün

Web Audio API ile bass boost, vocal enhance. AudioContext altyapısı normalization ile birlikte.

F4-4HLS DRM Güçlendirme15-25 gün

AES-128 + XOR yerine Widevine (Chrome/Android) + FairPlay (Safari/iOS). Endüstri standardı DRM.

Toplam Efor Haritası

FazKapsamMaddeEfor
Faz 1Bug fix + Optimize + Format + Soft Mode3821-38 gün
Faz 2Modüler yapı + Worker + IV=0 fix410-17 gün
Faz 3Telemetry + Service Worker + Normalization47-12 gün
Faz 4Offline + Multi-device + EQ + DRM440-70 gün
TÜM FAZLAR50 madde~78-137 gün