Oturum: SES-MM2VKMYQ-27RA | Nurullah (UID: 1) | 435 dakika
Nurullah 7 saatten fazla müzik dinlemiş. Genel olarak sistem stabil çalışmış — bellek 28-36MB arasında sabit kalmış, hiç HLS hatası olmamış, 945 segment'in hepsi başarıyla yüklenmiş.
Ancak bazı "gizli" sorunlar var: Sonraki şarkıyı önceden yükleme sistemi (preload) hiç çalışmamış gibi görünüyor — aslında muhtemelen çalışıyor ama sayaçları güncelleyen sinyaller (event'ler) hiç gönderilmemiş. Ayrıca ses seviyesi %0 olarak raporlanmış ama kullanıcı müzik dinlemiş — bu da raporlama hatası.
Sonuç: Player çalışıyor ama debug raporundaki 7 farklı metrik yanlış ölçülüyordu. Hepsi düzeltildi.
Sorun: Debug raporu Volume: 0% gösteriyor ama kullanıcı müzik dinlemiş (18 kez play basılmış).
Kök Neden: performance-debug.js:391 satırında store?.muted okunuyor ama player state'te property adı isMuted. Yanlış property → her zaman undefined → false.
Fix: store?.muted → store?.isMuted
Sorun: Şarkı geçişlerinde Cache: undefined → undefined gösteriliyor.
Kök Neden: streamUrlCache bir Map nesnesi. Alpine.js proxy'si Map.size getter'ını düzgün iletemiyor.
Fix: captureFullState() ve metrics'te Map.size yerine keys() ile iteratif sayım fallback'i eklendi.
Sorun: 16 şarkı geçişi olmuş ama tüm tetikleyiciler (autoplay, user_next, user_prev, shuffle_pick, direct_select) = 0.
Kök Neden: performance-debug.js bu event'leri dinliyor (player:next, player:prev, player:autoplay) ama player-core.js'te hiçbiri dispatch edilmemiş.
Fix: nextTrack()'e player:autoplay / player:next, previousTrack()'e player:prev, preload fonksiyonlarına player:preloadSuccess / player:preloadFail dispatch'leri eklendi.
Sorun: Crossfade kapalı (crossfadeEnabled: false) ama 16 farklı yerden startCrossfade() çağrılıyor — gereksiz fonksiyon çağrıları.
Fix: startCrossfade() ve completeCrossfade() fonksiyonlarının başına if (!this.crossfadeEnabled) return; guard'ı eklendi. Artık tüm çağrılar anında geri döner.
Sorun: 30 ardışık STALE_AUDIO uyarısı — her 11 saniyede bir tekrarlanıyor.
Kök Neden: safeAudioCleanup() sonrası hlsAudioNext element'inin currentSrc property'si bazı tarayıcılarda temizlenmez (src attribute kaldırılsa bile). Kontrol 5 !audio.currentSrc şartını geçemez → stale sayılır.
Fix: Kontrol 5 genişletildi: currentTime === 0 && (isNaN(duration) || duration === 0) = boş element. Ek Kontrol 6: !audio.getAttribute('src') && paused && currentTime === 0 = temizlenmiş element.
Sorun: Manifest'te NAME="original" yazıyor ama debug raporu bunu tanımıyor.
Kök Neden: getQualityInfo() fonksiyonundaki knownNames sözlüğünde "original" anahtarı yok.
Fix: knownNames sözlüğüne 'original': null eklendi ve "original" → "high" eşlemesi yapıldı.
Not: Logda Variant Sayısı: 1 görünmesi ise farklı bir durum. Master.m3u8'de 4 variant mevcut (ultralow/low/mid/original). HLS.js'in o anda sadece 1 variant raporlaması, uzun süre aynı level'da kaldığında (ABR sabitlenmiş) veya raporlama anında HLS instance'ın level cache'inin kısıtlı olmasından kaynaklanabilir. Bu, player'ın doğru çalıştığı anlamına gelir.
Sorun: Preload Başarılı: 0, Preload Başarısız: 0 — preload hiç çalışmamış gibi görünüyor.
Kök Neden: SEQ-DELTA ile aynı sorun — player:preloadSuccess ve player:preloadFail event'leri player-core.js'te hiç dispatch edilmemiş.
Fix: preloadNextSong() fonksiyonundaki FRAG_BUFFERED (başarılı), ERROR (başarısız) ve timeout (15sn aşım) durumlarına event dispatch'leri eklendi. Safari native path'e de eklendi.
Oturum boyunca 4 bağlantı değişimi yaşanmış:
Tek gecikme olayı (10:56:31) sırasında yapılan ağ testi: Ping 743ms, Jitter 1296ms → İnternet sorunu (%95 güven). Bu, player'ın değil kullanıcının internet bağlantısının geçici olarak yavaşlamasıdır. HLS ABR (Adaptive Bitrate) sayesinde kalite otomatik düşürülür ve dinleme kesilmez.
5 rebuffer olayı kaydedilmiş (toplam 1 saniye bekleme) — bu, 7 saatlik bir oturum için çok düşük bir değer.
public/themes/muzibu/js/player/features/performance-debug.js
muted → isMuted (volume fix)knownNames'e "original" eklendipublic/themes/muzibu/js/player/core/player-core.js
nextTrack()'e player:autoplay / player:next dispatchpreviousTrack()'e player:prev dispatchplayer:preloadSuccess dispatchplayer:preloadFail dispatchplayer:preloadFail dispatchstartCrossfade() → if (!crossfadeEnabled) return; guardcompleteCrossfade() → aynı guard