Tüm Raporlar / Uygulama Planı

Uygulama Planı & TODO

Player'ı dondurmadan, takılmadan çalıştırmak için yapılacakların tam listesi.

v4 22 Şubat 2026 mztest.muzibu.com

v4 — Kesin Kararlar

Soft Mode = MP3. İkisi aynı şey. Cihaz zayıfsa otomatik MP3'e geçir, kullanıcıya sormak yok.

  • Cihaz zayıf → otomatik MP3'e geçir, sessizce
  • Admin → herhangi bir kullanıcıyı HLS/MP3/Auto'ya zorla
  • Öncelik: Admin > Cihaz > Sistem
  • Cihaz kararı localStorage'da saklanır (aynı kişi farklı cihazdan farklı format)
  • Kullanıcı görmez, bilmez, karışmaz

Temel Mantık

Her şey bu üç kurala dayanıyor:

Cihaz Algılama

Telefon/tablet eski veya zayıfsa, sistem bunu fark eder ve sessizce MP3'e geçirir. Kullanıcıya sormaz. Bildirim göstermez.

localStorage'da saklanır

Admin Müdahalesi

Biri aradı, "donuyor" dedi. Admin panelden o kişinin formatını MP3'e çevirirsin. Bitti. Cihaz fark etmez, her yerde geçerli.

users.audio_preference

Öncelik Sırası

Admin bir şey ayarladıysa o geçerli. Ayarlamadıysa cihaz karar verir. Cihaz da karar vermediyse sistemin varsayılanı çalışır.

Admin > Cihaz > Sistem

Neden MP3 donmayı çözer?

HLS sistemi her şarkı parçası için şifre çözüyor, kalite hesaplıyor, segmentleri birleştiriyor. Bunların hepsi telefonun işlemcisini yoruyor. Eski bir telefonda bu işlemler birikince donma oluyor.

HLS (Ağır)

  • HLS.js kütüphanesi yüklenir (140 KB)
  • Her parça için AES-128 şifre çözülür
  • Kalite otomatik ayarlanır (CPU kullanır)
  • Segment yönetimi ana işlemcide çalışır
  • RAM: ~120-150 MB

MP3 (Hafif)

  • HLS.js hiç yüklenmez
  • Şifre çözme yok
  • Kalite hesaplama yok
  • Tek dosya, tek istek
  • RAM: ~40-60 MB

Kritik Bug: Şarkı Geçiş Sorunu

Müşteriler "şarkı bitince sonrakine geçmiyor" diyor. Bu en acil sorun.

Ne Oluyor?

Bir şarkı bitiyor. Player sonrakine geçmesi lazım ama geçmiyor. Bazen yarıda kesip diğerine atlıyor. Bazen sürekli çalma modu durduruluyor. Bunların hepsi farklı sebeplerden olabiliyor ama sonuç aynı: kullanıcı memnun değil.

Geçiş Nasıl Çalışıyor?

Şarkı bittiğinde arka planda bu adımlar sırayla çalışır:

1

Şarkı bitti sinyali

audio.onended — satır 2758

2

1 saniye bekle (çift tetikleme koruması)

onTrackEnded — 1sn debounce — satır 2964

3

Sonraki şarkıya geç

nextTrack() — kilit korumalı — satır 2011

4a

Sırada şarkı varsa → çal

4b

Sıra bittiyse → otomatik doldur. Doldurulamazsa → DURUR

Neden Olabilir? (7 İhtimal)

YÜKSEK 1. Sıra doldurulamıyor

Tür API'si hata verirse veya tüm şarkılar daha önce çalınmışsa sıra boş kalır.

YÜKSEK 2. Oturum düşmüş (401/403)

Token süresi dolmuş → şarkı yüklenemez → sessizce durur.

ORTA 3. Eski cihazda HLS tampon hatası

MediaSource API sınırı aşılır → onarılamaz hata. HLS havuzu: max 2.

ORTA 4. Geçiş kilidi takılı kalıyor

Hata olunca kilit açılmıyor → bir daha geçiş yapamıyor. Zamanlayıcı lazım.

DÜŞÜK 5. Safari arka plan sekmesi

Safari arka plandaki sekmeleri yavaşlatır → "bitti" sinyali kaçırılabilir.

DÜŞÜK 6. Crossfade sırasında çakışma

İki şarkı aynı anda aktif → iki token isteği → yarış durumu.

DÜŞÜK 7. Ön yükleme zamanlama sorunu

Sonraki şarkıyı önceden yüklerken eski şarkıyla çakışma.

Nasıl Düzelteceğiz?

FIX-1

Sıra hiçbir zaman boş kalmasın: Tür → Popüler → Karışık → Baştan

FIX-2

Geçiş kilidi: try/finally + 10 saniyelik güvenlik zamanlayıcısı

FIX-3

Oturum düşerse: Token yenile → tekrar dene → olmadı = sonraki şarkı

FIX-4

Geçiş kayıt sistemi: Her geçişi logla, sorunları debug panelde göster


Debug Mode

Şu an 180 KB'lık debug dosyası herkese yükleniyor. Gereksiz. Sadece geliştiriciler görsün.

Yeni Kural

URL'ye ?debug ekle VE yetkili kullanıcı ol. İkisi birlikte olmadan debug paneli açılmaz.

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

Sonuç: Normal kullanıcılar için 180 KB tasarruf + sayfa daha hızlı açılır.


Format Seçimi (HLS / MP3)

Hangi kullanıcı hangi formatta dinleyecek? Üç katmanlı basit bir sistem:

Karar Ağacı

1. Admin bu kullanıcıya format atamış mı?
   → Evet → O format geçerli (HLS veya MP3)

2. Cihaz zayıf mı? (otomatik algılama)
   → Evet → MP3

3. Hiçbiri → Sistem varsayılanı (HLS)

Kurumsal Hesaplar

5 veya daha fazla üyesi olan kurumsal hesaplar otomatik olarak MP3'e yönlendirilir. Bu eşik admin panelden değiştirilebilir.

Varsayılan Eşik
5 üye
Ayar Yeri
Settings → Muzibu Kurumsal
Saklama
JSON (settings tablosu)

Cihaz Algılama Detayı

Bu kontroller sayfa açılışında sessizce yapılır:

Kesin MP3

RAM ≤ 2 GB veya
bağlantı 2G

Muhtemelen MP3

RAM < 4 GB veya
CPU skoru < 4

HLS Kalabilir

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

Sonuç localStorage'a yazılır. Aynı kullanıcı güçlü PC'den girerse HLS, eski telefondan girerse MP3 dinler.


HLS Kalite & Crossfade

HLS Kalite Seviyeleri

HLS dinleyen kullanıcılar için mevcut kalite seçenekleri:

Seviye Kalite Ne Zaman?
ultralow32 kbpsÇok yavaş internet
low64 kbpsYavaş internet
mid128 kbpsNormal (başlangıç seviyesi)
highOrijinalHızlı internet (şu an devre dışı*)

* IV=0 hatası yüzünden en yüksek kalite (orijinal bitrate) filtreleniyor. Tüm dinleyiciler bundan etkileniyor. Faz 2'de düzeltilecek.

Crossfade (Geçiş Yumuşatma)

Şarkı geçişlerinde eski şarkı yavaşça kısılırken yeni şarkı yavaşça açılır. Kod tamamen hazır ama şu an kapalı. Otomatik açılacak.

Normal Cihaz (HLS)
5 saniye
Zayıf Cihaz (MP3)
3 saniye

Daha kısa = daha az RAM kullanımı


Kod İnceleme Düzeltmeleri

3 farklı AI (Claude, Gemini, GPT) tarafından incelendi. Kodla doğrulandı:

Çift Sorgu Problemi

Premium kontrolü ve abonelik verisi aynı DB sorgusunu iki kez çalıştırıyor. Birleşik cache ile ~5-15ms tasarruf.

Rate Limiting Eksik

Genel koruma var (Guest 60/dk, Normal 200/dk, Premium 300/dk) ama her endpoint için ayrı limit yok. Play sayısı şişirilebilir.

XOR Şifreleme Değil

URL'ler XOR ile karıştırılıyor ama bu şifreleme değil, sadece gizleme. Asıl koruma HLS AES-128.

DevTools IP Toplama

Geliştirici araçları açıldığında kullanıcının IP'si alınıyor. KVKK/GDPR açısından değerlendirilmeli.

Play Kaydı

Çalma kaydı (INSERT) senkron çalışmalı çünkü play_id gerekli. Ama ağır işler (duplikat kontrol, cache temizleme) arkaplanda olmalı.


Faz 1 — Yapılacaklar

Toplam 31 madde, 7 grup. Önem sırasıyla:

A. Şarkı Geçiş Fix

TAMAMLANDI — ABA testi BAŞARILI

A1. Sıra boş kalmayacak: Tür → Popüler → Karışık → Baştan

A2. Geçiş kilidi: try/finally + 10sn zamanlayıcı

A3. Oturum düşünce: Token yenile → tekrar dene → sonraki şarkı

A4. Geçiş loglama sistemi

A5. Şarkı yarıda kesilme koruması

ABA Test

5 şarkı doğal bitiş + 5 hızlı atlama + sıra sonu auto-refill + 10 şarkı art arda 2sn'de skip. Her geçiş < 3sn, yarıda kesilme yok.

B. Debug Mode

B1 TAMAMLANDI — ABA testi bekleniyor

B1. ?debug + yetki koşullu yükleme

B2. Mobil uyumlu debug paneli (ileri seviye)

B3. Admin'den debug açma/kapama — süreli (ileri seviye)

C. API Hızlandırma

Sunucu yanıt sürelerini düşür

C1. Premium + abonelik birleşik cache (2 saat)

C2. Son dinlenen / popüler / son çalınan cache

C3. Play kaydı: INSERT senkron, ağır işler arkaplanda

C4. HLS playlist dosya cache'i

C5. Endpoint bazlı rate limiting

D. Format & Soft Mode Altyapısı

Migration gerekli — 3 aşamalı onay!

D1. Migration: users → audio_preference (hls/mp3/auto)

D2. Settings: corporate_mp3_threshold (SettingManagement → Muzibu Kurumsal grubu, JSON)

D3. ENV: MUZIBU_DEFAULT_AUDIO_FORMAT

D4. resolveAudioFormat($user) — Admin > Cihaz > Sistem

D5. Frontend: detectDeviceCapability() → localStorage

D6. Admin panel: Kullanıcı bazlı format değiştirme

E. Crossfade

Kod hazır, açılacak

E1. Backend'den crossfade config gönder (HLS: 5sn, MP3: 3sn)

E2. crossfadeEnabled: true — otomatik açık, herkes için

E3. Zayıf cihazda süreyi otomatik kısalt (daha az RAM)

F. Sonsuz Çalma

"Gün boyu çalsın" isteği

F1. Sıra doldurma zinciri: Tür → Popüler → Rastgele → Baştan

F2. Arka plan sekmesi koruması

F3. Oturum canlı tutma (periyodik ping)

F4. Bellek sızıntısı temizliği

G. Donma Önleme

Soft Mode'un temel amacı

G1. MP3 modunda HLS.js hiç yüklenmesin (140 KB tasarruf)

G2. Hız testi: MP3'te tamamen kapat, normal'de 10MB → 1MB

G3. Hata izolasyonu: Bir parça çökse player çalmaya devam etsin

G4. Hızlı atlama testi: 20 şarkı art arda → bellek kontrolü

G5. Cihaz profillemesi ana işlemciyi bloklamasın

ABA Test — Donma

MP3 modunda HLS.js isteği yok + Hız testi tetiklenmiyor + 20 hızlı skip'te bellek < 30MB artış + Bir modül çökünce player devam ediyor.


Uygulama Sırası

Önce müşteri şikayetini çöz, sonra diğerlerine geç:

Sıra Grup Madde Migration?
1 A Şarkı Geçiş Fix 5 Hayır
2 B Debug Mode 3 Hayır
3 G Donma Önleme 5 Hayır
4 C API Hızlandırma 5 Hayır
5 E Crossfade 3 Hayır
6 F Sonsuz Çalma 4 Hayır
7 D Format & Soft Mode 6 Evet
FAZ 1 TOPLAM 31 1 migration

Gelecek Fazlar

Faz 1 bittikten sonra sırayla ele alınacak:

Faz 2 — Mimari İyileştirme

8.310 satırlık tek dosyayı parçalara ayırmak. Daha kolay bakım, daha hızlı yükleme.

F2-1. player-core.js'i modüllere ayır (core + features + services)
F2-2. Hız testi ve takip verilerini Worker'a taşı (ana işlemci rahatlar)
F2-3. IV=0 hatasını kalıcı düzelt (tüm dinleyiciler orijinal kaliteye erişsin)
F2-4. DevTools IP toplama → KVKK değerlendirmesi

Faz 3 — İzleme & Performans

Sorunları kullanıcı bildirmeden önce fark etmek. Admin panelde gerçek zamanlı durum görmek.

F3-1. Admin panelde player sağlık paneli (hata oranları, buffer durumu)
F3-2. Service Worker ile statik dosya cache (JS/CSS daha hızlı yüklenir)
F3-3. Ses codec uyumluluk kontrolü (eski Android sorunlarını önceden yakala)
F3-4. Ses seviyesi eşitleme (şarkılar arası ses farkı kalksın)

Faz 4 — Premium Özellikler

Uzun vadeli hedefler. Spotify/Apple Music seviyesine yaklaşma.

F4-1. Çevrimdışı dinleme (indirme)
F4-2. Çoklu cihaz senkronizasyonu (telefonda başla, PC'de devam et)
F4-3. Equalizer (bas güçlendirme, vokal artırma)
F4-4. Endüstri standardı DRM (Widevine + FairPlay)

Genel Bakış

Faz Ne Yapılacak? Madde
Faz 1Bug fix + Donma önleme + Format + Cache31
Faz 2Modüler yapı + Worker + IV=0 fix4
Faz 3İzleme + Service Worker + Ses eşitleme4
Faz 4Offline + Multi-device + EQ + DRM4
TOPLAM 43 madde

Veritabanı Değişiklikleri

Faz 1'de sadece 1 migration gerekiyor:

Tablo Değişiklik Detay
users 1 yeni kolon audio_preference (enum: hls / mp3 / auto, default: auto)
settings Yeni ayar grubu SettingManagement → Muzibu Kurumsal grubu → corporate_mp3_threshold (JSON, default: 5)

Migration Dosya Konumu

Central: Modules/Muzibu/database/migrations/

Tenant: Modules/Muzibu/database/migrations/tenant/

Her iki konumda da oluşturulacak.

Her migration için 3 aşamalı onay gerekli. Settings için önce SettingManagement modülü analiz edilecek.