🚨 Kritik Hata Muzibu.com.tr

HLS Timeout Hatası Analizi

Console çıktısında tespit edilen tekrarlayan müzik oynatma hatası

📅 25 Aralık 2025 📊 Kaynak: a-console.txt 🎵 Muzibu Player

📝 Basit Anlatım (Herkes İçin)

Sorun Nedir?
Muzibu müzik platformunda şarkı çalmaya çalışıldığında, müzik dosyası yüklenemiyor ve sürekli "zaman aşımı" hatası veriyor. Kullanıcı play butonuna bastığında şarkı başlamıyor veya çok geç başlıyor.

Neden Oluyor?
Müzik dosyaları özel bir format (HLS) ile stream ediliyor. Bu format, şarkıyı küçük parçalara bölerek gönderir. Ancak bu parçalar sunucudan gelmiyor veya çok yavaş geliyor. Sistem birkaç kez denedikten sonra pes ediyor.

Kullanıcı Etkisi:
🔴 Şarkılar çalmıyor
🔴 Player donuyor
🔴 Müzik deneyimi bozuk
🔴 Kullanıcı frustre oluyor

🔧 Teknik Detaylar (Geliştiriciler İçin)

Hata Özeti

  • ⚠️ Hata Tipi: HLS TIMEOUT
  • 📍 Dosya: public/themes/muzibu/js/player/core/player-core.js:2296
  • 🔁 Retry Mekanizması: Yeni signed URL ile tekrar deniyor (başarısız)
  • ♾️ Davranış: Sürekli tekrarlanan timeout (satır 32-45)

Console Log Çıktısı

player-core.js:2296 ⚠️ HLS TIMEOUT: Object
player-core.js:2296 ⚠️ HLS TIMEOUT: Object
player-core.js:2742 🔁 HLS retry with new signed URL Object
player-core.js:2296 ⚠️ HLS TIMEOUT: Object
player-core.js:2296 ⚠️ HLS TIMEOUT: Object
player-core.js:2296 ⚠️ HLS TIMEOUT: Object
player-core.js:2296 ⚠️ HLS TIMEOUT: Object

Hata sürekli tekrarlanıyor, retry mekanizması çalışıyor ama başarısız oluyor.

HLS (HTTP Live Streaming) Nedir?

HLS, Apple tarafından geliştirilen bir streaming protokolüdür. Müzik/video dosyasını küçük parçalara (segment) bölerek gönderiır.

  • 📄 Manifest (.m3u8): Segment'lerin listesini içeren dosya
  • 🧩 Segment (.ts): Müziğin küçük parçaları (genellikle 2-10 saniye)
  • 🔐 Signed URL: Güvenlik için zamana bağlı erişim linki

Player Başlangıç Durumu (Sorunsuz)

  • Player state cleared (fresh start)
  • Alpine global functions loaded
  • Initial queue loaded: 15 songs
  • Loaded 17 favorites

Player başarıyla başlatılıyor, sorun play edilmeye çalışıldığında başlıyor.

🔍 Olası Nedenler

1️⃣ HLS Manifest Dosyası Oluşturulmamış

Müzik dosyası upload edildiğinde HLS format'ına dönüştürülmüyor olabilir.

  • • FFmpeg job çalışmıyor
  • • Queue process edilmiyor
  • • Media Library hook eksik

2️⃣ Storage/CDN Erişim Sorunu

HLS dosyaları storage'da var ama web'den erişilemiyor olabilir.

  • • Nginx/Apache symlink takip etmiyor
  • • Permission hatası (403)
  • • .htaccess bloklama

3️⃣ Signed URL Süresi Dolmuş

Güvenlik için kullanılan zamana bağlı URL'ler çok kısa süreli olabilir.

  • • Token expiration çok kısa (örn: 30 saniye)
  • • Kullanıcı yavaş internet → timeout
  • • Retry'da yeni URL da expire oluyor

4️⃣ Server Timeout Ayarları Kısa

Nginx/PHP timeout'ları HLS stream için yetersiz olabilir.

  • • Nginx proxy_read_timeout düşük
  • • PHP max_execution_time kısa
  • • FastCGI timeout ayarı yetersiz

5️⃣ Media Dosyası Corrupt veya Eksik

Orijinal müzik dosyası bozuk veya HLS dönüşümü başarısız olmuş olabilir.

  • • Upload işlemi yarıda kesilmiş
  • • FFmpeg conversion failed
  • • Disk dolu, segment'ler yazılamamış

🛠️ Çözüm Önerileri

ADIM 1: HLS Dosyalarını Kontrol Et

Müzik dosyasının HLS formatına dönüştürülüp dönüştürülmediğini kontrol et.

# Bir şarkı seç ve storage'ı kontrol et:

ls -lah storage/tenant1001/app/public/songs/[song-id]/hls/

# Beklenen dosyalar:

master.m3u8 # Manifest dosyası segment-0.ts # Segment dosyaları segment-1.ts ...

ADIM 2: Web Erişimini Test Et

HLS dosyalarına web üzerinden erişilebildiğini kontrol et.

# Network tab'den bir HLS URL kopyala ve test et:

curl -I https://muzibu.com/storage/songs/[id]/hls/master.m3u8

# Beklenen: HTTP/2 200

# Hata: 403/404/500 → Storage permission veya symlink sorunu

ADIM 3: Player Core Kodunu İncele

Timeout ve retry mekanizmasının nasıl çalıştığını anla.

# İlgili dosya:

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

# Satır 2296: HLS TIMEOUT log

# Satır 2742: Retry with new signed URL

# Kontrol edilecek:

- Timeout süresi (kaç saniye?) - Retry count (kaç kez deniyor?) - Signed URL generation logic

ADIM 4: Backend API'yi Kontrol Et

HLS URL'leri üreten Laravel endpoint'i kontrol et.

# Muhtemel endpoint'ler:

Modules/Muzibu/app/Http/Controllers/Api/SongController.php Modules/MediaManagement/app/Services/HlsService.php

# Kontrol edilecek:

- HLS URL generation logic - Signed URL expiration time - Storage path doğruluğu

ADIM 5: Nginx/PHP Timeout Ayarlarını Artır

Server timeout'larını streaming için optimize et.

# Nginx config kontrol:

cat /etc/nginx/sites-enabled/muzibu.conf | grep timeout

# Önerilen değerler:

proxy_read_timeout 300; proxy_connect_timeout 300; fastcgi_read_timeout 300;

ADIM 6: Horizon Queue'yu Kontrol Et

HLS conversion job'larının çalışıp çalışmadığını kontrol et.

php artisan horizon:status php artisan queue:failed

# Failed job varsa:

php artisan queue:retry all

📁 İlgili Dosyalar

🔴 public/themes/muzibu/js/player/core/player-core.js:2296

HLS TIMEOUT hatası buradan loglanıyor

🔁 public/themes/muzibu/js/player/core/player-core.js:2742

Retry mekanizması (yeni signed URL ile)

🎵 Modules/Muzibu/app/Http/Controllers/Api/SongController.php

Song API endpoint (HLS URL generation)

📦 Modules/MediaManagement/app/Jobs/GenerateHlsJob.php

HLS conversion queue job (muhtemel)

🗂️ storage/tenant1001/app/public/songs/[id]/hls/

HLS dosyalarının storage konumu

🎯 Sonraki Adımlar

  1. 1. Browser console'da hatanın tekrar ettiği bir şarkıyı tespit et
  2. 2. Network tab'den HLS manifest URL'ini kopyala
  3. 3. Curl ile URL'e erişmeyi dene (200 OK gelir mi?)
  4. 4. Storage'da HLS dosyalarının varlığını kontrol et
  5. 5. Player core kodundaki timeout süresini kontrol et
  6. 6. Backend'de HLS URL generation logic'i incele
  7. 7. Sorunu tespit et ve fix uygula