Tamamlandi

Muzibu Player - Kritik Buglar Duzeltildi

30 Aralik 2025 - Gapless Playback + 401 Loop Fix

Basit Anlatim (Herkes Icin)

Sorun 1: Sarkilar erken atliyordu - 3 dakikalik sarki 30 saniyede bitiyordu gibi davraniyordu.

Sorun 2: Bazen sarki takiliyor ve sonsuz donguye giriyordu (401 hatasi).

Sorun 3: Sesi kapatip actiktan sonra ses gelmiyordu.

Simdi Ne Oluyor?

  • + Sarkilar GERCEKTEN bitene kadar caliniyor
  • + 401 hatasi olursa 3 deneme sonrasi sonraki sarkiya geciliyor
  • + Mute/unmute duzgun calisiyor
1

BUFFER_EOS Erken Tetikleme Sorunu

Onceki Durum (BUG)

  • - HLS buffer bosalinca BUFFER_EOS tetikleniyordu
  • - Preloaded sarkilar sadece ilk segment yukluydu
  • - Sarki basladiginda buffer hemen bosaliyordu
  • - Sistem "sarki bitti" sanip sonrakine atliyordu
  • = Sarkilar saniyeler icinde atliyordu!

Yeni Durum (COZUM)

  • + BUFFER_EOS geldiginde zaman kontrolu yapiliyor
  • + timeRemaining > 5 ise yoksayiliyor
  • + Sadece son 5 saniyede gercek bitis kabul ediliyor
  • + 300ms sonra tekrar kontrol ediliyor
  • = Sarkilar tam suresini caliniyor!

Teknik Detay

Dosya: player-core.js - Satir: 2797-2851, 3553-3603

// BUFFER_EOS handler'a eklenen guard
const timeRemaining = duration - currentTime;
if (duration > 0 && timeRemaining > 5) {
    console.log('BUFFER_EOS IGNORED - not near end');
    return; // Yoksay, sarki bitmedi
}
2

401 Sonsuz Retry Dongusu

Onceki Durum (BUG)

  • - Signed URL suresi dolunca 401 hatasi
  • - HLS.js surekli ayni expired URL'i deniyordu
  • - refreshHlsUrl cagrilsa da HLS.js retry loop'u durmuyor
  • - Yuzlerce 401 hatasi uretiliyordu
  • = Sarki takiliyor, CPU yukseliyor!

Yeni Durum (COZUM)

  • + _frag401RetryCount sayaci eklendi
  • + Her 401 hatasinda sayac artiriliyor
  • + 3 denemeden sonra HLS destroy ediliyor
  • + Otomatik olarak sonraki sarkiya geciliyor
  • = Sonsuz dongu yok, sarki atlanip devam!

Teknik Detay

Dosya: player-core.js - Satir: 3663-3701

// Max retry kontrolu
self._frag401RetryCount++;
if (self._frag401RetryCount >= 3) {
    console.error('Max 401 retries exceeded, skipping to next song');
    self._frag401RetryCount = 0;
    self.hls.destroy();
    self.nextTrack(false);
    return;
}
3

Mute/Unmute Ses Sorunu

Onceki Durum (BUG)

  • - toggleMute sadece audio.muted set ediyordu
  • - audio.volume degismiyordu
  • - Sarki degisince volume=0 kaliyordu
  • = Unmute sonrasi ses gelmiyordu!

Yeni Durum (COZUM)

  • + Hem muted hem volume set ediliyor
  • + Her iki audio element (hlsAudio, hlsAudioNext) guncelleniyor
  • + Mute = volume 0, Unmute = volume restore
  • = Ses kontrolu duzgun calisiyor!

Teknik Detay

Dosya: player-core.js - Satir: 1443-1462

toggleMute() {
    this.isMuted = !this.isMuted;
    const targetVolume = this.isMuted ? 0 : this.volume / 100;

    // Her iki audio element icin
    [audio1, audio2].forEach(audio => {
        audio.muted = this.isMuted;
        audio.volume = targetVolume;  // + EKLENDI
    });
}

Gapless Playback Sistemi - Ozet

Sarki Oynatilirken:
  timeupdate -> currentTime >= 2s -> preloadNextSong()
                                         |
                                         v
                                  Sonraki sarki HLS yukleniyor
                                  (sadece ilk segment)

Sarki Bitince (Gercek Bitis):
  BUFFER_EOS -> timeRemaining <= 5s -> onTrackEnded()
                     |                      |
                     v                      v
              (> 5s = IGNORE)         nextTrack(true)
                                           |
                                           v
                                    Preloaded audio HEMEN baslar
                                    Eski HLS 100ms sonra temizlenir

401 Hatasi Olursa:
  fragLoadError 401 -> retryCount++
                          |
         (< 3) -----------+----------- (>= 3)
           |                              |
           v                              v
    refreshHlsUrl()              HLS destroy + nextTrack()
                

Console Ciktilari

BUFFER_EOS Yoksayildi (Dogru Davranis)

BUFFER_EOS fired {currentTime: '73.6', duration: '161.7', timeRemaining: '88.1'}
BUFFER_EOS IGNORED (normal) - not near end, timeRemaining: 88.1

BUFFER_EOS Kabul Edildi (Gercek Bitis)

BUFFER_EOS fired {currentTime: '158.2', duration: '161.7', timeRemaining: '3.5'}
Calling onTrackEnded from BUFFER_EOS
nextTrack: has next song, playing index 2

401 Sonrasi Atlama

Fragment 401/403 - Retry count: 1
Fragment 401/403 - Retry count: 2
Fragment 401/403 - Retry count: 3
Max 401 retries exceeded, skipping to next song

Test Kontrol Listesi

Degisiklik Yapilan Dosyalar

M public/themes/muzibu/js/player/core/player-core.js

Satirlar: ~100 satir eklendi/degistirildi

Yeni state: _frag401RetryCount