Şarkı Geçiş Sorunu Analizi

MP3 Player Geçiş Mekanizması İncelemesi

25 Şubat 2026 Dosyalar Sağlam Frontend İnceleme Gerekli

Hızlı Özet

32,864
Aktif Şarkı
%100 Dosya Sağlam
0
Backend Hatası
Log'larda hata yok
?
Frontend Sorunu
Muhtemel sebep

Basit Anlatım (Herkes İçin)

Ne Araştırdık?

Müşteriler şarkı geçişlerinde sorun yaşıyor. Bir şarkı bittiğinde sonraki şarkıya düzgün geçiş yapılmıyor olabilir.

Ne Bulduk?

  • Şarkı dosyaları sağlam: Tüm 32,864 aktif şarkının MP3 dosyası mevcut ve düzgün.
  • Backend çalışıyor: Sunucu tarafında şarkı servisi düzgün çalışıyor, hata logu yok.
  • Sorun muhtemelen tarayıcıda: Player kodu karmaşık, geçiş mekanizmasında ince sorunlar olabilir.

Neden Önemli?

Müşteri deneyimi açısından şarkı geçişlerinin kesintisiz olması kritik. Şarkı bittiğinde sonraki şarkı otomatik başlamalı.

Teknik Detaylar (Geliştiriciler İçin)

Dosya & Veritabanı Durumu

Metrik Değer Durum
Toplam MP3 Dosyası 46,379 OK
Aktif Şarkı (DB) 32,864 OK
Aktif + Dosya Sağlam 32,864 (%100) OK
Bozuk Dosya (< 10KB) 10,908 İnaktif

Bozuk dosyalar inaktif şarkılara ait, aktif şarkıları etkilemiyor.

Player Geçiş Mekanizması

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

Şarkı bitişinde tetiklenen zincir:

Audio.onended event
    ↓
onTrackEnded() (satır 2594)
    ↓
Spot kontrol (anons sistemi)
    ├─ Spot zamanı ✓ → playSpotAudio() → playNextFromQueue()
    └─ Normal ✗ → nextTrack(true)
    ↓
playSongFromQueue()
    ↓
isFailedSong() kontrolü (blacklist)
    ├─ Blacklist'te → şarkıyı atla, sonrakine geç
    └─ Temiz → şarkıyı çal

Koruma Mekanizmaları (Guard'lar)

  • 300ms Double-trigger guard: Aynı şarkı için 300ms içinde 2. geçiş engellenir
  • 5dk Failed song blacklist: Başarısız şarkılar 5 dakika boyunca atlanır
  • 3x 401/403 retry: Fragment hatası 3 kez denenir, sonra şarkı atlanır

API Endpoint'leri

GET /api/muzibu/songs/{id}/stream → MP3 URL al
GET /audio/songs/{id}/{expires}/{sig} → MP3 serve
POST /api/muzibu/songs/{id}/track-start → Dinleme başlat
POST /api/muzibu/songs/{id}/track-end → Dinleme bitir

Olası Sorun Senaryoları

Duration Uyumsuzluğu

Veritabanındaki süre ile MP3 dosyasının gerçek süresi farklı olabilir. Bu durumda şarkı "erken" veya "geç" bitiyor gibi görünür.

Kontrol: Sorunlu şarkının DB duration'ı vs ffprobe duration

Network/Buffering Sorunu

Yavaş internet bağlantısında şarkı buffer boşalınca duraklar. Player bunu "bitti" olarak algılayabilir.

Kontrol: onwaiting, onstalled event'leri

Blacklist Etkisi

Daha önce hata veren şarkı 5 dakika boyunca blacklist'te. Sıradaki şarkı blacklist'teyse atlanır, bu "takılma" hissi verebilir.

Kontrol: Console'da "Song in blacklist" mesajı

Cihaz/Tarayıcı Farkı

iOS Safari, Android Chrome ve masaüstü tarayıcılar farklı davranabilir. Özellikle mobilde autoplay politikaları farklı.

Kontrol: Hangi cihaz/tarayıcıda sorun yaşanıyor?

Çözüm Planı

1

Müşteriden Detay Al

Sorun yaşayan müşteriden şu bilgileri iste:

  • • Hangi cihaz/tarayıcı kullanıyor?
  • • Sorun belirli şarkılarda mı, rastgele mi?
  • • "Geçmiyor" derken ne oluyor? (Duruyor? Takılıyor? Aynı şarkı tekrar mı?)
  • • Ekran görüntüsü/video alabilir mi?
2

Browser Console Log'larını İncele

Sorun anında F12 → Console sekmesinde hata mesajları var mı?

// Aranacak mesajlar:
"Song in blacklist"
"Max 401 retries exceeded"
"nextTrack called"
"ERROR"
3

Debug Mode Aktifle

Player'da debug modu aktifken geçiş adımları loglanır. Sorun tespit edilebilir.

// Browser console'da çalıştır:
localStorage.setItem('playerDebug', 'true');
// Sayfayı yenile ve geçişleri izle
4

Sorunlu Şarkıyı Tespit Et

Eğer belirli şarkılarda sorun varsa, o şarkının:

  • • MP3 dosyasının integrity'sini kontrol et (ffprobe ile)
  • • Duration bilgisini karşılaştır (DB vs gerçek)
  • • Encoding formatını kontrol et (CBR/VBR)
5

Gerekirse Kod Düzeltmesi

Sorunun kaynağı belirlendikten sonra:

  • • Duration mismatch → DB'yi güncelle veya player'da tolerans ekle
  • • Blacklist sorunu → TTL süresini azalt veya clear mekanizması ekle
  • • Event timing → Guard değerlerini ayarla (300ms değiştirilebilir)

Hızlı Kontrol Komutları

# Belirli bir şarkının MP3 bilgilerini al:

ffprobe -i /path/to/song.mp3 -show_format -v quiet

# Son stream hatalarını ara:

grep -i "error\|warning" storage/tenant1001/logs/tenant-*.log | grep -i song | tail -20

# Şarkı ID ile dosya kontrolü (tinker):

$song = DB::table('muzibu_songs')->where('song_id', 12345)->first(); dd($song->file_path);