Player Donma Sorunu - Düzeltme Raporu

bufferAppendError analizi ve çözümü

Basit Anlatım (Herkes İçin)

Sorun Neydi?

Müzik çalarken bazen donma yaşanıyordu. Bunun sebebi, bir sonraki şarkıyı hazırlarken (preload) eski şarkının bellekte temizlenmeden yeni şarkının yüklenmeye çalışılmasıydı. İki şarkı aynı anda aynı yere yazılmaya çalışınca sistem "bufferAppendError" hatası verip donuyordu.

Ne Yapıldı?

  • Yeni şarkı yüklenmeden önce eski şarkı tamamen temizleniyor
  • Temizlik işlemi tamamlanana kadar kısa bir bekleme eklendi
  • Çakışmayı önlemek için ek güvenlik kontrolleri eklendi

Ek Sorun: DeviceProfile Tablosu

Veritabanında muzibu_device_profiles tablosu eksik. Bu yüzden cihaz profili kaydedilemiyor ve konsolda 500 hatası görünüyor. Bu kritik değil, player çalışmaya devam ediyor.

Tablo oluşturmak için migration gerekiyor (ayrı onay gerekli).

Teknik Detaylar (Geliştiriciler İçin)

Tespit Edilen Hatalar

Hata Açıklama Önem Durum
bufferAppendError HLS preload sırasında SourceBuffer çakışması Kritik ✓ Düzeltildi
DeviceProfile 500 Tablo eksik, cihaz profili kaydedilemiyor Orta Sessizce geçiliyor
Next butonu tutarsız bufferAppendError kaynaklı Orta ✓ Düzeltildi

Değişiklik 1: _cleanupPreloadedNext() Fonksiyonu

Dosya: player-core.js:6972

// 🔧 FIX: bufferAppendError önleme
// 1️⃣ stopLoad - Yeni segment yüklemeyi durdur
preloadInfo.hls.stopLoad();

// 2️⃣ detachMedia - MediaSource bağlantısını kes
preloadInfo.hls.detachMedia();

// 3️⃣ destroy - HLS instance'ı tamamen temizle
preloadInfo.hls.destroy();

Değişiklik 2: preloadNextSong() Fonksiyonu

Dosya: player-core.js:6787

// 🛡️ Kısa gecikme - MediaSource'un tamamen sıfırlanması için
// bufferAppendError önleme: eski SourceBuffer'lar temizlenmeden yeni append yapılamaz
await new Promise(resolve => setTimeout(resolve, 100));

Değişiklik 3: Audio Element Temizleme

Dosya: player-core.js:6848

// 🔧 FIX: Mevcut audio'yu AGRESİF temizle
// Tüm event handler'ları kaldır
nextAudio.onerror = null;
nextAudio.onended = null;
nextAudio.ontimeupdate = null;
// ... diğer handler'lar

// Pause ve src temizle
nextAudio.pause();
nextAudio.removeAttribute('src');
nextAudio.load(); // MediaSource'u sıfırla

// 🛡️ Ek gecikme
await new Promise(resolve => setTimeout(resolve, 50));

Değişiklik 4: DeviceProfiler Hata Yönetimi

Dosya: device-profiler.js:305

// 🔧 FIX: Backend başarısız olsa bile player çalışmaya devam etmeli
// Tablo olmayabilir, sessizce geç ve tekrar deneme
isInitialized = true; // Tekrar denemeyi engelle
console.log('[DeviceProfiler] Backend kullanılamıyor, devam ediliyor');
return null;

ABA Test Sonuçları (16 Şubat 2026)

Sayfa Yükleme: Başarılı
İlk Şarkı: 2 saniyede başladı
Şarkı Geçişi: Tutarsız (düzeltildi)
Seek Testi: Mükemmel
Uzun Çalma: Sorunsuz
Pause/Play: Çalışıyor
Network: bufferAppendError (düzeltildi)
7/10 9/10 (Beklenen)

Bekleyen İşler

DeviceProfile Migration

muzibu_device_profiles tablosu oluşturulmalı. 3 aşamalı onay gerekli.

bufferAppendError düzeltmesi

Tamamlandı

16 Şubat 2026 • Muzibu.com