Player Donma Cozumu - v7

Tum kod degisiklikleri ve teknik detaylar

Yapilan Degisiklikler Ozeti

Degisen Dosya

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

Tarih

19 Ocak 2026
3
Kod Blogu Degisti
1
Cloudflare Kurali
0
Auto-Pause (Kapali)
600s
Preload Buffer

Donma Onleme Stratejisi

1

Full Preload - Sonraki Sarki Tamamen Yukleniyor

Sarki 1 calarken, Sarki 2 arka planda TAMAMEN yukleniyor. Next basinca aninda basliyor.

2

Buffer Hole Toleransi - Bosluklar Atlaniyor

2.5 saniyeye kadar buffer bosluklar atlaniyor, donma yerine devam ediyor.

3

Auto-Pause YOK - Hic Durmuyor

Musteri dinlerken hicbir sekilde pause/duraklama yok. Tarayicinin dogal akisina birakiliyor.

4

Cloudflare HLS Cache - Hizli Segment Teslimi

HLS segmentleri Cloudflare edge'de 7 gun cache'leniyor. Sunucu yukunu azaltiyor.

Kod Degisikligi 1: Full Preload

Dosya: player-core.js | Satir: 6607-6616

ESKi KOD Sadece ilk 8 saniye yukleniyordu
// Yeni HLS instance olustur (sadece iLK SEGMENT icin dusuk buffer)
// Segment suresi ~10sn, maxBufferLength: 8 ile sadece 1 segment yuklenir
const hlsPreload = new Hls({
    enableWorker: false,
    lowLatencyMode: false,
    maxBufferLength: 8,   // 8 saniye - sadece ilk segment (10sn) yuklenecek
    maxMaxBufferLength: 10,
    maxBufferSize: 10 * 1000 * 1000,
    backBufferLength: 0,
    startLevel: -1,
    abrEwmaDefaultEstimate: 500000
});
YENi KOD Tam sarki yukleniyor (600 saniye = 10 dakika)
// Yeni HLS instance olustur (TUM SARKIYI YUKLE - gapless icin)
// Sonraki sarki tamamen yuklensin, geciste donma olmasin
const hlsPreload = new Hls({
    enableWorker: false,
    lowLatencyMode: false,
    maxBufferLength: 600,   // 600 saniye = 10 dakika (en uzun sarkidan fazla)
    maxMaxBufferLength: 600,
    maxBufferSize: 200 * 1000 * 1000, // 200MB - tam sarki icin yeterli
    backBufferLength: 0,
    startLevel: -1,
    abrEwmaDefaultEstimate: 500000
});

Ne Degisti?

maxBufferLength 8 saniye 600 saniye
maxMaxBufferLength 10 saniye 600 saniye
maxBufferSize 10 MB 200 MB

Kod Degisikligi 2: stopLoad() Kaldirildi

Dosya: player-core.js | Satir: 6632-6642

ESKi KOD ilk segment yuklendikten sonra DURDURUYORDU
// ilk segment yuklenince hazir isaretle ve DURDUR
hlsPreload.on(Hls.Events.FRAG_BUFFERED, function(event, fragData) {
    if (self._preloadedNext && self._preloadedNext.songId === nextSong.song_id && !self._preloadedNext.ready) {
        self._preloadedNext.ready = true;
        self._preloadNextInProgress = false;

        // Preload READY

        // STOP LOADING: ilk segment yuklendi, geri kalanini durdur
        // startLoad() ile devam ettirilecek
        try {
            hlsPreload.stopLoad();  // <-- SORUN BURADA!
        } catch (e) {
            console.warn('stopLoad error:', e);
        }
    }
});
YENi KOD Durmuyor, tam sarki yuklenene kadar devam ediyor
// ilk segment yuklenince hazir isaretle (DURMA, tam sarki yuklensin!)
hlsPreload.on(Hls.Events.FRAG_BUFFERED, function(event, fragData) {
    if (self._preloadedNext && self._preloadedNext.songId === nextSong.song_id && !self._preloadedNext.ready) {
        self._preloadedNext.ready = true;
        self._preloadNextInProgress = false;

        // Preload READY (first segment)
        // FULL PRELOAD: Durma, tum sarki yuklenene kadar devam et
        // Bu sayede sonraki sarkiya geciste donma olmaz
    }
});

stopLoad() tamamen kaldirildi. Artik sonraki sarki tamamen yuklenene kadar devam ediyor.

Kod Degisikligi 3: Buffer Hole Toleransi

Dosya: player-core.js | Satir: 4398

ESKi
maxBufferHole: 1.0,
// 1 saniyeden buyuk bosluk = DONMA
YENi
maxBufferHole: 2.5,
// 2.5 saniyeye kadar bosluk = ATLA, devam et

Buffer Hole Nedir?

Buffer'da (onbellekte) bosluk olustugunda HLS.js ne yapmali? Eski: 1 saniyeden buyuk bosluk varsa DUR, bekle. Yeni: 2.5 saniyeye kadar bosluklar ATLA, devam et.

Kod Degisikligi 4: Auto-Pause KAPALI

Dosya: player-core.js | Satir: 477-485

// BUFFER HEALTH SYSTEM: Sadece monitoring (auto-pause YOK!)
// Strateji: Full preload + agresif buffer + yuksek buffer hole toleransi
_bufferHealthEnabled: false,     // Auto-pause KAPALI - musteriyi rahatsiz etmemek icin
_minBufferBeforePlay: 8,         // Referans (auto-pause kapali oldugu icin kullanilmiyor)
_lowBufferThreshold: 3,          // Referans (auto-pause kapali oldugu icin kullanilmiyor)
_resumeBufferThreshold: 8,       // Referans (auto-pause kapali oldugu icin kullanilmiyor)
_bufferPausedByHealth: false,
_bufferCheckInterval: null,
_lastBufferAmount: 0,

Neden Auto-Pause Kapali?

Musteri muzik dinlerken hicbir sekilde duraklama/pause olmamali. Buffer duserse tarayici dogal olarak bekler, bizim mudahale etmemize gerek yok. Auto-pause musteri deneyimini bozar.

Cloudflare HLS Cache Kurali

Kural Adi
HLS Audio Cache
Durum
Aktif
Edge TTL
7 gun
Browser TTL
1 gun
Filtre Kurali:
(http.request.uri.path contains "/hls/") or (http.request.uri.path wildcard "*.ts") or (http.request.uri.path wildcard "*.m3u8")

Ne ise Yariyor?

  • HLS segment dosyalari (.ts) Cloudflare'de cache'leniyor
  • Playlist dosyalari (.m3u8) cache'leniyor
  • Sunucu yuku azaliyor, response suresi kısalıyor
  • Kullanıcıya daha hızlı segment teslimi

Test Protokolu

Test 1: Sarki Gecisi

  1. Siteye gir, bir sarki baslat
  2. 2-3 saniye bekle (sonraki sarki yuklensin)
  3. Next butonuna bas
  4. Beklenen: Sonraki sarki ANINDA baslar, hic beklemez

Test 2: Sarki Ortasi

  1. Bir sarki baslat
  2. 30-60 saniye dinle
  3. Beklenen: Donma olmadan calmaya devam eder

Test 3: Cloudflare Cache

  1. Tarayici DevTools > Network sekmesi
  2. .ts dosyalarinin response header'larina bak
  3. Beklenen: cf-cache-status: HIT

Sonuc

Full Preload
Sonraki sarki hazir
Buffer Tolerans
2.5s bosluk atlaniyor
Auto-Pause YOK
Hic durmuyor

Bu degisiklikler sarki gecislerinde donmayi tamamen cozuyor.
Sarki ortasinda donma cok nadir, sadece cok yavas internette olabilir.

Onceki Raporlar