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.
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.
Ö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.
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:
Şarkı bitti sinyali
audio.onended — satır 2758
1 saniye bekle (çift tetikleme koruması)
onTrackEnded — 1sn debounce — satır 2964
Sonraki şarkıya geç
nextTrack() — kilit korumalı — satır 2011
Sırada şarkı varsa → çal
Sıra bittiyse → otomatik doldur. Doldurulamazsa → DURUR
Neden Olabilir? (7 İhtimal)
Tür API'si hata verirse veya tüm şarkılar daha önce çalınmışsa sıra boş kalır.
Token süresi dolmuş → şarkı yüklenemez → sessizce durur.
MediaSource API sınırı aşılır → onarılamaz hata. HLS havuzu: max 2.
Hata olunca kilit açılmıyor → bir daha geçiş yapamıyor. Zamanlayıcı lazım.
Safari arka plandaki sekmeleri yavaşlatır → "bitti" sinyali kaçırılabilir.
İki şarkı aynı anda aktif → iki token isteği → yarış durumu.
Sonraki şarkıyı önceden yüklerken eski şarkıyla çakışma.
Nasıl Düzelteceğiz?
Sıra hiçbir zaman boş kalmasın: Tür → Popüler → Karışık → Baştan
Geçiş kilidi: try/finally + 10 saniyelik güvenlik zamanlayıcısı
Oturum düşerse: Token yenile → tekrar dene → olmadı = sonraki şarkı
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.
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.
Cihaz Algılama Detayı
Bu kontroller sayfa açılışında sessizce yapılır:
RAM ≤ 2 GB veya
bağlantı 2G
RAM < 4 GB veya
CPU skoru < 4
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? |
|---|---|---|
| ultralow | 32 kbps | Çok yavaş internet |
| low | 64 kbps | Yavaş internet |
| mid | 128 kbps | Normal (başlangıç seviyesi) |
| high | Orijinal | Hı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.
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.
Faz 3 — İzleme & Performans
Sorunları kullanıcı bildirmeden önce fark etmek. Admin panelde gerçek zamanlı durum görmek.
Faz 4 — Premium Özellikler
Uzun vadeli hedefler. Spotify/Apple Music seviyesine yaklaşma.
Genel Bakış
| Faz | Ne Yapılacak? | Madde |
|---|---|---|
| Faz 1 | Bug fix + Donma önleme + Format + Cache | 31 |
| Faz 2 | Modüler yapı + Worker + IV=0 fix | 4 |
| Faz 3 | İzleme + Service Worker + Ses eşitleme | 4 |
| Faz 4 | Offline + Multi-device + EQ + DRM | 4 |
| 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.