mztest.muzibu.com → canlı (muzibu.com) geçiş değerlendirmesi
1 Mart 2026
Kritik blokleyici yok. 2 ufak iyilestirme oneriliyor ama zorunlu degil.
Player ne durumda? Son 1 haftada yapilan 30+ optimizasyonla player ciddi sekilde iyilestirildi. Sarki baslatma suresi yaklasik 1 saniye kisaldi (6 HTTP istegi → 2'ye dustu). Sarkilar arasinda gecis daha akici, bellek sizintilari temizlendi, gereksiz kodlar (crossfade gibi) kaldirildi.
Testler ne diyor? 3 farkli Puppeteer (gercek tarayici) testi calisti. Temel player testi 9/9 gecti. Master inline (P2-10) testi 11/11 gecti. Key + Playlist inline (P2-11/12) testinde 4 basarisiz var ama hepsi headless Chrome'un ses calma kisitlamasindan kaynakli — gercek tarayicida sorun yok.
Risk var mi? Buyuk risk yok. Duration (sure gosterimi) hatasi az once duzeltildi ama henuz canli tarayicida test edilmedi. Yarin canliya gecmeden once Chrome'da bir hard refresh (Ctrl+Shift+R) yapip surelerin dogru gorunup gorunmedigini kontrol etmek yeterli.
Sonuc: Player, canliya cikmaya hazir durumda. Ciddi bir blokleyici yok. Onerilenleri yapmak "daha iyi" yapar ama "zorunlu" degil.
| Kod | Aciklama | Etki | Durum |
|---|---|---|---|
| Faz 1 | A, B, G, C, F, D gruplari (HLS, ABR, Soft Mode, Format...) | Temel altyapi | |
| P0-1 | HLS retry sayaci sifirlama (playSong basinda) | Retry sonsuz dongu onleme | |
| P0-2 | saveQueueState 500ms debounce (4 $watch → 1) | CPU tasarrufu | |
| P0-3 | startAutoLog root kullanicilarda devre disi | Gereksiz loglama yok | |
| P0-4 | nextTrack guard timeout 10s → 3s | Hizli recovery | |
| P0-5 | visibilitychange timeout temizligi | Bellek sizintisi onleme | |
| P0-9 | handleSessionTerminated async | Await uyumlulugu | |
| P0-12 | stream_url null kontrolu → sessiz fallback | Crash onleme | |
| P1-1 | getBitrate() Redis cache (86400s TTL) | Backend hizlandirma | |
| P1-2 | CacheService eager load: album.artist, album.media, genre | N+1 query onleme | |
| P1-4/5 | segmentStatListener polling → event-driven | CPU tasarrufu | |
| P1-7 | updatePanel() — innerHTML sadece panel acikken | DOM islemini azaltma | |
| P2-4 | refillQueue fire-and-forget (paralel, sarki hemen calar) | ~200ms kazanc | |
| P2-6 | ABR config fix (2Mbps start, upFactor 0.7, downFactor 0.9) | ABR stabilite | |
| P2-10 | master.m3u8 inline bypass (blob URL) | ~660ms kazanc | |
| P2-11 | Encryption key inline (base64 → cache) | ~150ms kazanc | |
| P2-12 | Variant playlist inline (4 playlist → cache) | ~250ms kazanc | |
| Fix | Crossfade tamamen kaldirildi (~480 satir temizlendi) | Basitlik, stabilite | |
| Fix | Redis KEYS → SCAN migration (4 metot) | Redis bloklanmayi onleme | |
| Fix | Orphan HLS cleanup + yetim timeout temizligi | Bellek sizintisi onleme | |
| Fix | Duration/progress bar hatasi duzeltmesi (3 katmanli fix) | UI dogru sure gosterimi | Test bekliyor |
| Fix | Orphan kod temizligi (controller + auth + spa-router) | Dead code kaldirildi |
| Risk | Seviye | Aciklama | Onlem |
|---|---|---|---|
| Duration fix testi | Dusuk | Az once yapildi, henuz gercek tarayicide test edilmedi | Canli'ya gecmeden Chrome'da hard refresh + sarki degistir |
| ipify.org harici cagri | Dusuk | Timeout yok, yavas agda fetch askida kalabilir | Kritik degil — sadece konsol logu icin, player'i bloklamaz |
| P2-11/12 sessiz catch | Bilgi | Inline veri hataliysa sessizce HTTP'ye duser, log yok | Fallback calisiyor, debug zorluklari icin loglama eklenebilir |
| 15 saat oturum | OK | HlsPool (max 2), orphan cleanup, AbortController | Mevcut korumalar yeterli |
| Safari uyumlulugu | OK | Native HLS, ES5 uyumlu fonksiyonlar, proxy bypass | Mevcut mimari Safari icin uygun |
| Fallback zinciri | OK | HLS ABR → sabit → MP3 128k → 64k → sonraki sarki | 5 katmanli graceful degradation |
| Tenant cache izolasyonu | OK | Redis prefix (mztest_) tenant bazli ayrilmis | Diger tenant'larla cakisma riski yok |
| Dosya | Degisiklik | Satir |
|---|---|---|
| player-core.js | P2-10/11/12 inline + duration fix + CachingKeyLoader + preload | +190 |
| SongStreamController.php | key_inline + playlists_inline backend ekleme | +150 |
| AddHlsVariantsCommand.php | Audio filter v2 guncellemesi | +36/-36 |
| ConvertToHLSJob.php | Audio filter v2 guncellemesi | +57/-57 |
| HLSService.php | Key URI endpoint guncellemesi | +26/-26 |
Stream API ─────────────────────────────────────────────────────────────
POST /api/muzibu/songs/{id}/stream
Response: { _, __, ___ (encrypted), master_inline, key_inline, playlists_inline, song, ... }
│
▼
decryptStreamData() ── stream_url, fallback_url, stream_type
│
┌─────────────┼──────────────────────────────────────────────────────┐
│ playSong() │ │
│ ├── P2-11: key_inline → _hlsKeyCache[keyUrl] = ArrayBuffer │
│ ├── P2-12: playlists_inline → _hlsPlaylistCache[path] = string │
│ └── P2-10: master_inline → this._masterInline = string │
└─────────────┼──────────────────────────────────────────────────────┘
│
▼
playHlsStream()
├── P2-10: blob URL from _masterInline ──────────► HLS.js loadSource(blobUrl)
├── P2-11: key already in _hlsKeyCache ──────────► CachingKeyLoader serves 0ms
└── P2-12: playlists in _hlsPlaylistCache ────────► CachingKeyLoader serves 0ms
│
▼
HLS.js ── requests segments ── audio plays
P2-10/11/12 inline ──(null?)──► Normal HTTP fetch (eski davranis)
│ │
▼ ▼
HLS ABR (high→mid→low→ultralow) ──(FATAL?)──► retryHlsWithNewUrl
│ │
▼ ▼
MP3 fallback (128k → 64k) ──(fail?)──► nextTrack()
Player, canliya gecmeye hazir durumda. Son 1 haftada yapilan 30+ optimizasyon ve bug fix'le onemli olcude iyilestirildi:
Tek bekleyen is: Duration fix'in gercek tarayicida dogrulanmasi. Bunu yarin canliya gecmeden once 30 saniyelik bir test ile tamamlayabilirsiniz.