Müzik çalma sisteminde 15 saniye timeout sorunu analizi ve çözüm önerileri
Sorun Nedir?
Muzibu'da bir şarkı çalmaya çalıştığınızda, şarkının yüklenmesi 15 saniyeyi geçerse sistem "timeout" (zaman aşımı) hatası veriyor. Şarkı hiç başlamıyor veya çok geç başlıyor.
Neden Oluyor?
Kullanıcı Deneyimi:
Neden Önemli?
Bu hata, kullanıcıların Muzibu'da müzik dinlemesini tamamen engelliyor. Premium üyelik satan bir platformda, ödeme yapan kullanıcıların müzik dinleyememesi kritik bir sorundur. Kullanıcı kaybına ve şikayetlere yol açar.
✅ URL formatı doğru: /hls/muzibu/songs/{id}/{filename}
❌ Sorun: 401 Unauthorized - Authentication başarısız oluyor
public/themes/muzibu/js/player/core/player-core.js:2220
→ HLS timeout logic (15 saniye)
Modules/Muzibu/app/Http/Controllers/Api/SongStreamController.php:547
→ serveHls() method (playlist + segment serve)
Modules/Muzibu/Providers/MuzibuServiceProvider.php:187
→ HLS route registration (throttle:120,1)
app/Services/SignedUrlService.php:52
→ generateHlsUrl() (token + signature generation)
Frontend → /api/muzibu/songs/{id}/stream
User session check, premium validation, HLS URL generation
Backend → Signed URL oluşturur
Token: mzb_login_token, Expires: TTL, Signature: HMAC-SHA256
Player → /hls/muzibu/songs/{id}/playlist.m3u8
HLS.js otomatik istek gönderir (token, expires, sig parametreleri ile)
❌ serveHls() → Token validation FAIL → 401
Olası sebepler: Expired token, session missing, signature mismatch
❌ HLS.js 15 saniye bekler → Timeout → Retry
Retry de başarısız olursa MP3 fallback'e geçer (veya hata verir)
expires=1766426062 parametresi geçmiş olabilir.
URL oluşturulduğu anda TTL hesaplanıyor ama player çalarken zaman geçiyor.
HLS.js tarayıcı tarafından paralel istek gönderir. Cookie otomatik gönderilmiyor olabilir.
Token oluşturulurken ve validate edilirken farklı signature hesaplanıyor olabilir.
Kullanıcının oturumu başka cihazdan giriş yapılınca sonlandırılmış olabilir.
storage/logs/laravel.log dosyasını kontrol et
user_active_sessions tablosunda token'ı kontrol et
Şu an max 30 dakika olan TTL'i artır. Uzun şarkılarda timeout riski azalır.
15 saniye çok kısa. En az 30-45 saniye olmalı.
HLS.js timeout retry sayısını artır. Daha fazla şans tanı.
Şarkı çalarken URL expire olmadan önce otomatik yenile.
401 hatası alındığında tam sebep loglanmalı (token missing? expired? signature fail?)
HLS başarısız olursa otomatik MP3'e geç. Kullanıcı hiç beklemeden dinlemeye devam etsin.
HLS dosyalarını Laravel'den değil, doğrudan Nginx'ten serve et. Authentication Nginx modülü ile yap.
ngx_http_auth_request_module kullanSession'ları dosya yerine Redis'te tut. Daha hızlı lookup, timeout riski azalır.
Token validation'ı asenkron yap. İlk istek hemen dosyayı serve etsin, background'da validation çalışsın.
⚠️ Güvenlik riski var, dikkatli implement edilmeli (rate limiting + monitoring şart)
storage/logs/laravel.log dosyasında "HLS serve denied" loglarını bul.
Hangi sebeple 401 dönüyor? (token missing, expired, signature fail, session missing)
Frontend timeout: 15s → 45s
Backend TTL: 300s → 3600s (60 dakika)
HLS.js maxLoadTimeMs: 30s → 60s
Premium üye hesabı ile giriş yap → Şarkı çal → Console'u izle → Hata devam ediyorsa log'a bak
SongStreamController::serveHls() metoduna detaylı log ekle. Hangi validation'da fail oluyor göster.
refreshHlsUrlForCurrentSong() metodunu daha erken tetikle (%20 → %50). Expire olmadan yenile.
Production'da 1 hafta izle. Timeout hataları azaldı mı? Kullanıcı şikayeti var mı?
🤖 Bu rapor Claude AI tarafından oluşturulmuştur
📅 Oluşturulma Tarihi: 22 Aralık 2025