29 Aralik 2025 - Muzibu Player Refactoring
Crossfade neden sorun cikariyor?
bufferAppendError - HLS buffer'a veri eklenemiyormediaError - MediaSource API hatalariGECICI COZUM: Crossfade simdi devre disi!
player-core.js:172 - crossfadeEnabled: false
Nasil Calisir:
ended event tetikleninceAvantajlari:
Mevcut sistem zaten var: preloadNextSong()
Gelistirme onerileri:
streamUrlCache'de saklaSimdilik implement ETME! Once gapless duzgun calismali.
Eger gelecekte eklenecekse:
- crossfadeEnabled (satir 172)
- crossfadeDuration (satir 173)
- isCrossfading (satir 175)
- crossfadeTimeoutId (satir 176)
- crossfadeNextIndex (satir 177)
- howlNext (satir 179)
- hlsNext (satir 181)
- nextHlsAudioId
- startCrossfade() (~satir 1486)
- createNextHowlerPlayer() (~satir 1670)
- createNextHlsPlayer() (~satir 1703)
- completeCrossfade() (~satir 1831)
- fadeAudioElement() (crossfade icin kullanilan)
- timeupdate: crossfade trigger kodunu kaldir
- ended: crossfade kontrolunu kaldir, direkt onTrackEnded()
- BUFFER_EOS: crossfade kontrolunu kaldir
- pause: crossfade completion kodunu kaldir
- hlsAudioNext audio elementi (artik gerekli degil)
- Sadece tek hlsAudio elementi yeterli
+ preloadNextSong() - Bu kalmali!
+ streamUrlCache - Bu kalmali!
+ onTrackEnded() - Bu zaten var
+ playNextSong() - Bu zaten var
Sarki Calmaya Basladiginda
currentTime > 2sn olunca preloadNextSong() cagir
Preload Islemi
API'den URL al, streamUrlCache'e kaydet (HLS instance OLUSTURMA!)
Sarki Bittiginde (ended event)
onTrackEnded() → playNextSong() → playSongFromQueue()
Sonraki Sarkiyi Cal
Cache'de URL varsa kullan, yoksa API'den al. Tek HLS instance ile cal.
// Sarki bittiginde (ended event)
onTrackEnded() {
// Mevcut HLS'i temizle
if (this.hls) {
this.hls.destroy();
this.hls = null;
}
// Sonraki sarkiya gec
const nextIndex = this.getNextSongIndex();
if (nextIndex >= 0) {
// playSongFromQueue cache'den URL alacak
this.playSongFromQueue(nextIndex);
}
}
// playSongFromQueue zaten cache kontrolu yapiyor:
// const cached = this.getCachedStream(song.song_id);
// if (cached) { data = cached; } else { fetch from API }