Muzibu Player Donma Analizi

Player sistemi inceleme ve ABA test rehberi

Basit Anlatım (Herkes İçin)

Sorun: Bazı müşteriler Muzibu'da müzik dinlerken donma yaşıyor.

Neden olabilir?

  • Yavaş internet: Müzik parçaları (HLS segment'leri) yüklenemiyor
  • Eski cihaz/tarayıcı: Düşük RAM veya eski tarayıcı versiyonu
  • Bellek dolması: Uzun dinleme sonrası tarayıcı yoruluyor
  • Ağ sorunları: WiFi kesintileri, mobil veri zayıflığı

Test amacı: Sorunun bizde mi (sunucu/kod) yoksa müşteride mi (internet/cihaz) olduğunu anlamak.

Teknik Detaylar (Geliştiriciler İçin)

Player Mimarisi

HLS.js (Ana)

  • • AES-128 şifreli streaming
  • • maxBufferLength: 150 sn
  • • maxBufferSize: 200 MB
  • • Worker: Kapalı

Howler.js (Fallback)

  • • MP3 fallback
  • • HTML5 Audio
  • • HLS başarısız olursa

Kritik Dosyalar

public/themes/muzibu/js/player/core/player-core.js → Ana player (358KB!)
public/themes/muzibu/js/player/features/buffer-monitor.js → Buffer izleme
public/themes/muzibu/js/player/features/speed-tester.js → Hız testi
public/themes/muzibu/js/player/features/device-profiler.js → Cihaz profili
public/themes/muzibu/js/player/features/old-device-checker.js → Eski cihaz uyarısı

Potansiyel Sorun Alanları

1. Büyük Buffer Boyutu

200MB buffer + 250sn max buffer → Düşük RAM'li cihazlarda sorun

2. setInterval Birikimi

progressInterval, sessionPollInterval, bufferCheckInterval → Temizlenmezse bellek sızıntısı

3. HLS Segment Timeout

maxLoadTimeMs: 60sn → Yavaş internette segment yüklenemez, buffer boşalır

4. Buffer Health Kapalı

_bufferHealthEnabled: false → Buffer boşalınca auto-pause yok, donma yaşanır

Mevcut Korumalar

BufferMonitor: Donma tespit → Hız testi tetikle
SpeedTester: İnternet hızı ölçümü
OldDeviceChecker: Eski cihaz uyarısı
DeviceProfiler: Cihaz bilgisi toplama

ABA Test Promptu

Aşağıdaki promptu ABA'ya (AI Browser Agent) yapıştırarak müşteri cihazında çalıştırın. Test sonuçları sorunun kaynağını belirlememize yardımcı olacak.

ABA Test Prompt - Kopyala ve yapıştır
🎯 GÖREV: Muzibu Player Donma Testi - Kapsamlı Analiz

📋 AMAÇ:
Müşteri cihazında Muzibu player'ın donma sorununu tespit etmek.
Sorunun sunucu tarafında mı yoksa müşteri tarafında mı olduğunu belirlemek.

🌐 TEST URL: https://muzibu.com

📝 TEST SENARYOSU:

AŞAMA 1 - CİHAZ BİLGİSİ TOPLAMA:
1. Sayfayı aç ve DevTools Console'u aç (F12)
2. Şu komutları çalıştır ve sonuçları kaydet:

   ```javascript
   // Cihaz bilgileri
   console.log('=== CİHAZ BİLGİSİ ===');
   console.log('RAM:', navigator.deviceMemory, 'GB');
   console.log('CPU Çekirdek:', navigator.hardwareConcurrency);
   console.log('Platform:', navigator.platform);
   console.log('User Agent:', navigator.userAgent);
   console.log('Ekran:', screen.width + 'x' + screen.height);
   console.log('Tarayıcı Dil:', navigator.language);
   console.log('Çevrimiçi:', navigator.onLine);

   // Bağlantı bilgisi
   const conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection;
   if (conn) {
       console.log('=== BAĞLANTI ===');
       console.log('Bağlantı Tipi:', conn.type);
       console.log('Effective Type:', conn.effectiveType);
       console.log('Downlink:', conn.downlink, 'Mbps');
       console.log('RTT:', conn.rtt, 'ms');
       console.log('Save Data:', conn.saveData);
   }
   ```

AŞAMA 2 - PLAYER DURUMU KONTROLÜ:
1. Herhangi bir şarkıya tıkla ve çalmaya başla
2. 10 saniye bekle
3. Console'da şu komutu çalıştır:

   ```javascript
   // Player durumu
   const store = Alpine.store('player');
   console.log('=== PLAYER DURUMU ===');
   console.log('Çalıyor mu:', store.isPlaying);
   console.log('Buffer durumu:', store.isBuffering);
   console.log('Şarkı yükleniyor:', store.isSongLoading);
   console.log('HLS Stream:', store.isHlsStream);
   console.log('Şu anki süre:', store.currentTime);
   console.log('Toplam süre:', store.duration);
   console.log('Kuyruk uzunluğu:', store.queue?.length);

   // HLS instance kontrolü
   if (store.hls) {
       console.log('=== HLS DURUMU ===');
       console.log('HLS Aktif:', !!store.hls);
       const levels = store.hls.levels;
       if (levels && levels.length > 0) {
           console.log('Bitrate:', levels[0].bitrate);
       }
   }
   ```

AŞAMA 3 - BUFFER ANALİZİ:
1. Şarkı çalarken şu komutu çalıştır:

   ```javascript
   // Buffer analizi
   const audio = document.getElementById('hlsAudio');
   if (audio && audio.buffered.length > 0) {
       console.log('=== BUFFER ANALİZİ ===');
       for (let i = 0; i < audio.buffered.length; i++) {
           console.log('Buffer', i, ':', audio.buffered.start(i).toFixed(2), '-', audio.buffered.end(i).toFixed(2), 'sn');
       }
       const bufferedAhead = audio.buffered.end(audio.buffered.length - 1) - audio.currentTime;
       console.log('Önde buffer:', bufferedAhead.toFixed(2), 'sn');
   }

   // Memory kullanımı (varsa)
   if (performance.memory) {
       console.log('=== BELLEK ===');
       console.log('Kullanılan:', (performance.memory.usedJSHeapSize / 1024 / 1024).toFixed(2), 'MB');
       console.log('Toplam:', (performance.memory.totalJSHeapSize / 1024 / 1024).toFixed(2), 'MB');
       console.log('Limit:', (performance.memory.jsHeapSizeLimit / 1024 / 1024).toFixed(2), 'MB');
   }
   ```

AŞAMA 4 - DONMA SİMÜLASYONU:
1. 3 farklı şarkı çal (N tuşu ile geç)
2. Her şarkıda 30 saniye bekle
3. Donma olursa:
   - Tam olarak ne zaman oldu? (süre)
   - Buffer durumu nasıldı?
   - Console'da hata var mı?

   ```javascript
   // Donma anında çalıştır
   console.log('=== DONMA ANI ===');
   const store = Alpine.store('player');
   const audio = document.getElementById('hlsAudio');
   console.log('Current Time:', audio?.currentTime);
   console.log('Paused:', audio?.paused);
   console.log('Ready State:', audio?.readyState);
   console.log('Network State:', audio?.networkState);
   console.log('isPlaying flag:', store?.isPlaying);
   console.log('isBuffering flag:', store?.isBuffering);

   // Son 10 saniye buffer kontrolü
   if (audio?.buffered?.length > 0) {
       const lastEnd = audio.buffered.end(audio.buffered.length - 1);
       console.log('Buffer sonu:', lastEnd);
       console.log('Buffer açığı:', lastEnd - audio.currentTime);
   }
   ```

AŞAMA 5 - HIZ TESTİ:
1. Şu komutu çalıştır:

   ```javascript
   // Manuel hız testi
   console.log('=== HIZ TESTİ BAŞLIYOR ===');
   if (window.MuzibuSpeedTester) {
       MuzibuSpeedTester.runTest('manual').then(result => {
           console.log('Download Hızı:', result.download_speed, 'Mbps');
           console.log('Latency:', result.latency_ms, 'ms');
           console.log('Jitter:', result.jitter_ms, 'ms');
           console.log('Analiz:', result.analysis);
       });
   }
   ```

AŞAMA 6 - UZUN SÜRELI TEST (OPSİYONEL):
1. 10 dakika boyunca müzik çalmaya bırak
2. Her 2 dakikada bir buffer ve memory kontrolü yap
3. Donma olursa AŞAMA 4'teki komutları çalıştır

✅ BAŞARI KRİTERLERİ:
- [ ] Cihaz bilgileri toplanmış
- [ ] Player normal başlamış (isPlaying: true)
- [ ] Buffer yeterli (en az 10sn önde)
- [ ] Hız testi tamamlanmış (>2 Mbps)
- [ ] 3 şarkı sorunsuz çalınmış
- [ ] Memory sızıntısı yok (<200MB kullanım)

❌ SORUN TESPİT KRİTERLERİ:
- RAM < 4GB → Cihaz yetersiz
- Download < 2 Mbps → İnternet yavaş
- Buffer < 3sn → Stream sorunu
- Memory > 500MB → Bellek sızıntısı
- readyState < 4 → Yükleme sorunu
- networkState === 3 → Ağ hatası

📊 RAPOR:
Test bitiminde şu bilgileri raporla:
1. Cihaz özellikleri (RAM, CPU, tarayıcı)
2. İnternet hızı (download, latency)
3. Donma oldu mu? (evet/hayır, kaç kez)
4. Donma anındaki buffer durumu
5. Memory kullanımı (başlangıç vs bitiş)
6. Console hataları (varsa)

🎯 SONUÇ DEĞERLENDİRME:
- "Cihaz sorunu" → RAM < 4GB veya eski tarayıcı
- "İnternet sorunu" → Download < 2 Mbps veya yüksek latency
- "Sistem sorunu" → Yeterli cihaz + yeterli internet ama yine donma

Hızlı Kontrol Listesi

Müşteri Tarafı Kontroller

Sunucu Tarafı Kontroller

16 Şubat 2026 • Muzibu.com