MP3 Geçici Fix Raporu

HLS bufferAppendError Sorununun Geçici Çözümü

🔧 Geçici Fix Backend Stream API

Özet

HLS stream'de bufferAppendError hatası nedeniyle bazı şarkılar çalmıyordu. Geçici çözüm olarak tüm stream'ler MP3 formatına yönlendirildi.

⚠️ Bu geçici bir düzeltmedir. Kalıcı çözüm için FFmpeg filtreleri düzeltilip şarkılar yeniden HLS'e convert edilmelidir.

📝 Basit Anlatım

Sorun Neydi?

Bazı şarkılar HLS (parçalı stream) formatında çalarken hata veriyordu. Şarkı 0. saniyede takılıp başlamıyordu. Konsol'da bufferAppendError ve fragParsingError hatası görünüyordu.

Neden Önemli?

  • Kullanıcılar bazı şarkıları hiç dinleyemiyordu
  • Player takılıyor, ses çıkmıyordu
  • Sadece MP3 fallback modunda çalışıyordu

Nasıl Çözüldü?

Backend, stream isteğinde stream_type: 'mp3' döndürecek şekilde değiştirildi. Böylece player HLS yerine direkt MP3 kullanıyor - hatasız, stabil çalışıyor.

✅ Sonuç: Tüm şarkılar sorunsuz çalıyor

Kalıcı Çözüm Ne Olacak?

  1. FFmpeg stereotools filtresini kaldır/düzelt
  2. Bozuk şarkıları yeniden HLS'e convert et
  3. Bu fix'i geri al, HLS'e geri dön

🔧 Teknik Detaylar

Değiştirilen Dosyalar

Modules/Muzibu/App/Http/Controllers/Api/SongStreamController.php Asıl Dosya

Satır 163:

// ❌ ÖNCE:
'stream_type' => 'hls',
// ✅ SONRA:
'stream_type' => 'mp3', // 🔧 GEÇİCİ FIX: HLS bufferAppendError önleme
Modules/Muzibu/App/Http/Controllers/Api/SongController.php Eski/Deprecated

Satır 253:

// ❌ ÖNCE:
'type' => !empty($song->hls_path) ? 'hls' : 'mp3',
// ✅ SONRA:
'type' => 'mp3', // 🔧 GEÇİCİ FIX

⚠️ Not: Bu dosya artık kullanılmıyor ama yedek olarak değiştirildi

API Endpoint

GET
/api/muzibu/songs/{id}/stream

Player bu endpoint'i çağırdığında artık stream_type: 'mp3' dönüyor. HLS URL verilse bile player MP3 modunda çalışıyor.

Player Davranışı

// player-core.js:4346-4364
let useHls = false;
if (streamType) {
    useHls = streamType === 'hls'; // ❌ 'mp3' geldiği için false
}

if (useHls) {
    this.isHlsStream = true;
    await this.playHlsStream(url, targetVolume, autoplay); // ❌ Çalışmaz
} else {
    this.isHlsStream = false;
    await this.playWithHowler(url, targetVolume, autoplay); // ✅ Burası çalışır
}

Howler.js MP3 stream'i oynatır - HLS.js bypass edilir.

Güvenlik Korunuyor mu?

Evet, tüm güvenlik sistemleri aktif:

  • Premium kontrolü: Guest/Free → 401/402 (değişmedi)
  • Signed URL: 30 dk TTL + imza (değişmedi)
  • URL şifreleme: XOR encryption (değişmedi)
  • Rate limiting: throttle.user:stream (değişmedi)

Sadece stream_type değişti, güvenlik katmanları aynen çalışıyor.

🧪 Test Planı

1

Daha önce hata veren şarkıyı çal

Örnek: Song ID 36102 (Everything Moves)

2

Console'u kontrol et

✅ Beklenen: isHlsStream = false görünmeli
❌ Olmamalı: bufferAppendError hatası

3

Şarkı çalıyor mu kontrol et

0. saniyede takılmamalı, ses çıkmalı

4

Network sekmesini kontrol et

✅ Beklenen: /api/muzibu/songs/{id}/serve (MP3 dosyası)
❌ Olmamalı: .m3u8 veya segment-*.ts istekleri

💡 Not: Tüm şarkılar MP3 modunda çalacak. HLS kullanılmayacak.

🎯 Sonraki Adımlar (Kalıcı Çözüm)

FFmpeg Filtre Düzeltmesi

ConvertToHLSJob.php'de stereotools filtresini kaldır veya daha hafif bir EQ kombinasyonu kullan

Bozuk Şarkıları Tespit Et

hls_path IS NOT NULL olan şarkıları yeniden convert et

Toplu Conversion

Queue job ile tüm HLS dosyalarını yeni filtre ile yeniden oluştur

Bu Fix'i Geri Al

stream_type: 'hls' şeklinde geri değiştir

Test & Doğrulama

Önceden hata veren şarkıları HLS modunda test et

📦 Git Commit

31d45b5c5

🔧 CHECKPOINT: Before MP3 fallback (HLS fragParsingError geçici fix)

Bu commit'e geri dönmek için: git reset --hard 31d45b5c5