✅ Şarkı çalma sistemi tamamen çalışır hale geldi!
✅ HLS chunk token authorization düzeltildi
✅ Thumbnail görselleri düzeltildi
✅ Cover image priority logic eklendi (song > album > placeholder)
✅ Tenant-aware storage path problemi çözüldü
✅ HLS.js query string preservation uygulandı
Hata: GET https://muzibu.com/api/muzibu/songs/319/chunk_000.ts 404
Sebep: HLS.js, playlist.m3u8 içindeki chunk URL'lerinden query string'leri (?token=...) ve /chunk/ path segment'ini kaldırıyordu
Çözüm:
xhrSetup fonksiyonu eklendiLEVEL_LOADED event'i ile chunk URL'leri token'larıyla birlikte saklandıHata: Chunk dosyaları storage/app/public/ yerine storage/tenant1001/app/public/ konumunda
Sebep: PlaylistGeneratorService ve SongController tenant-aware storage path kullanmıyordu
Çözüm:
tenant('id') kontrolü eklendistorage_path("../tenant{$tenantId}/app/public/{$path}")Hata: FFmpeg chunk_XXX.ts oluştururken, kod segment-XXX.ts arıyordu
Çözüm:
/((?:segment-|chunk_)\d+\.ts)/str_contains($line, 'chunk_') eklendiHata: GET /thumb/2054/56/56 404
Sebep: Thumbmaker route yoktu, frontend /thumb/{mediaId}/{width}/{height} formatında istek yapıyordu
Çözüm:
/thumbmaker query string route eklendi/thumb/{mediaId}/{width}/{height} shortcut route eklendi (thumbmaker'a redirect)İstek: Şarkının kendi görseli öncelikli, yoksa albüm görseli gösterilsin
Çözüm:
song.media_id > album.media_id > placeholder/placeholder-album.jpgHata: Guest preview bittiğinde this.pause() çağrısı hataya düşüyordu
Çözüm:
this.howl.pause()audio.pause()✅ ChunkTokenService ile signed URL generation
✅ Token içeriği: song_id, chunk_name, user_id, is_premium, expires_at
✅ Token TTL: 15 dakika (900 saniye)
✅ HMAC-SHA256 signature ile güvenlik
✅ Guest kullanıcılar: İlk 4 chunk erişimi (30 saniye preview)
✅ Premium kullanıcılar: Tüm chunk'lara sınırsız erişim
✅ Central: storage/app/public/
✅ Tenant 1001: storage/tenant1001/app/public/
✅ HLS chunks: muzibu/hls/{song_id}/
✅ Chunk format: chunk_000.ts to chunk_059.ts
✅ Playlist: playlist.m3u8
✅ Encryption: AES-128 CBC mode
✅ enableWorker: true (web worker kullan)
✅ lowLatencyMode: false
✅ Custom xhrSetup (token preservation)
✅ LEVEL_LOADED event listener (chunk URL caching)
✅ Query string preservation logic
✅ Fallback to MP3 on HLS error
✅ Dual Engine: HLS.js (primary) + Howler.js (fallback)
✅ HLS Priority: Önce HLS dene, başarısızsa MP3
✅ Guest Preview: 30 saniye (4 chunk × 7.5s avg)
✅ Fade-in/Fade-out: 1000ms smooth transition
✅ SPA Navigation: Müzik kesintisiz devam eder
✅ Alpine.js reactive state management
Thumbmaker route'ları eklendi (query string + path-based)
Chunk pattern fix + tenant storage path + signed URL generation
Tenant storage path fix (serveChunk method)
HLS.js xhrSetup + LEVEL_LOADED event + pause fix + cover priority logic
Logout olun → Herhangi bir şarkı çalın → 30 saniye sonra otomatik durmalı
Premium hesapla login → Şarkı baştan sona kesintisiz çalmalı
Player'da şarkı görseli doğru görünmeli (şarkının kendi görseli veya albüm görseli)
Şarkı çalarken sayfa değiştir → Müzik kesintisiz devam etmeli
HLS conversion olmamış şarkı → Otomatik MP3'e fallback yapmalı