🔴

HLS Fragment Parsing Hatası

FFmpeg Audio Filtrelerinin Neden Olduğu Segment Bozulmaları

📅 20 Şubat 2026 🎵 Muzibu.com

📝 Basit Anlatım (Herkes İçin)

🔴 Sorun Nedir?

Bazı şarkılar HLS formatına dönüştürülürken tamamen bozuk dosyalar üretiliyor. Şarkı hiç başlamıyor, oynatıcı hemen hata veriyor.

🎯 Hata Mesajı:

fragParsingError: "Failed to find demuxer by probing fragment data"
position_sec: 0 (şarkının başında)

Bu mesaj şunu söylüyor: "İndirdiğim dosyayı açamıyorum, içerik anlaşılmaz."

🍕 Basit Benzetme:

MP3 şarkınız = Mükemmel pizza tarifi

FFmpeg filtreleri = Tarifine ekstra baharatlar ekleme

Bazı pizzalara çok baharat ekleyince = Tamamen yenilmez hale geliyor

Tarayıcı = İlk lokmasını alıyor ve reddediyor

🔍 Neden Oluyor?

Ses kalitesini iyileştirmek için kullanılan filtreler (loudnorm, stereotools, equalizer) bazı şarkılarla uyumsuz.

Özellikle stereo genişletme (stereotools) mono veya dar stereo şarkılarda sesi tamamen bozuyor.

✅ Nasıl Anlaşılır?

  • Şarkı hiç başlamıyor (0. saniyede hata)
  • Console'da fragParsingError yazıyor
  • Aynı şarkıyı her kullanıcı dinlediğinde aynı hata (cache değil, dosya bozuk)
  • MP3 fallback çalışıyor ama HLS çalışmıyor

🔧 Teknik Detaylar (Geliştiriciler İçin)

📋 Hata Detayları

HLS FATAL ERROR: {
  song_id: 36102,
  song: 'Everything Moves',
  artist: 'Muzibu',
  hls_path: 'muzibu/hls/36102',
  errorType: 'mediaError',
  errorDetails: 'fragParsingError',
  errorFatal: true,
  errorReason: 'Failed to find demuxer by probing fragment data',
  position_sec: 0,
  response: undefined,
  url: undefined
}

🐛 Kök Neden

FFmpeg Audio Filtreleri bazı ses dosyalarında corrupt audio frames üretiyor.

Sorunlu Kod:

Modules/Muzibu/App/Jobs/ConvertToHLSJob.php:116-122

$audioFilters = implode(',', [
    'loudnorm=I=-16:TP=-1.5:LRA=11',       // Loudness normalization
    'stereotools=mlev=1.2',                 // ❌ SORUN BURADA!
    'equalizer=f=100:t=q:w=1:g=1',         // Bass boost +1dB
    'equalizer=f=8000:t=q:w=1:g=-2',       // Treble cut -2dB
    'lowpass=f=14000'                       // 14kHz low-pass
]);

⚙️ FFmpeg Filtreleri Neden Bozuyor?

stereotools (Kritik)

Stereo genişletme %120

  • Mono şarkılarda phase cancellation
  • Dar stereo kayıtlarda clipping
  • Bazı codec'ler decode edemiyor
⚠️

loudnorm + stereotools

Kombinasyon riski

  • Loudness normalization peak limiting yapıyor
  • Ardından stereo widening clipping yaratıyor
  • Cascade failure: Her filtre öncekini bozuyor

loudnorm (Güvenli)

LUFS bazlı normalize

Genelde sorunsuz, sadece bazı edge case'lerde hafif bozulma

equalizer + lowpass (Güvenli)

Frekans filtreleme

Minimal risk, genelde sorunsuz

🔬 "Failed to find demuxer" Ne Demek?

Demuxer: Konteyner formatını (TS) parse edip audio/video stream'lerini ayıran component

Hata: segment-000.ts dosyası indirildi ama içerik geçerli bir MPEG-TS formatında değil

Sebep: FFmpeg filtreleri corrupt frame üretince, segment dosyası bozuk binary data içeriyor

Sonuç: HLS.js dosyayı açamıyor, MEDIA_ERR_DECODE veriyor

🔀 Diğer HLS Hatalarından Farkı

Özellik DECODE Error (177s) PARSING Error (0s)
Konum 177. saniye (ortada) 0. saniye (başlangıç)
Segment segment-017.ts segment-000.ts
Sonuç Şarkı başlıyor, sonra duruyor Şarkı hiç başlamıyor
Ciddiyet Orta Yüksek
Cloudflare Cache corruption olabilir FFmpeg encoding hatası

Çözüm Önerileri

🚨 Acil Çözüm (Hemen)

1.

Bozuk şarkıyı yeniden convert et

Song ID 36102 → Delete HLS files → Re-convert
2.

Cloudflare cache'i temizle

Purge: muzibu/hls/36102/*

⚠️ Not: Yeniden convert edince yine bozuk olabilir (filtreler değişmediği sürece)

✅ Kalıcı Çözüm (FFmpeg Filtreleri)

🥇

Seçenek 1: Minimal (En Güvenli)

Yeni filtre konfigürasyonu:

$audioFilters = 'loudnorm=I=-16:TP=-1.5:LRA=11';

Artılar: %95+ şarkı sorunsuz, minimal risk

Eksiler: Stereo genişletme yok, EQ yok

🥈

Seçenek 2: Orta Yol (Önerilen)

Yeni filtre konfigürasyonu:

$audioFilters = implode(',', [
    'loudnorm=I=-16:TP=-1.5:LRA=11',
    'equalizer=f=100:t=q:w=1:g=1',    // Bass boost
    'lowpass=f=14000'                  // High freq cut
]);

Artılar: %90+ şarkı sorunsuz, EQ korunuyor

Eksiler: Stereo genişletme yok

🥉

Seçenek 3: Hafif Stereo (Riskli)

Yeni filtre konfigürasyonu:

$audioFilters = implode(',', [
    'loudnorm=I=-16:TP=-1.5:LRA=11',
    'stereotools=mlev=1.05',          // ⚠️ 1.2 → 1.05 (hafif)
    'equalizer=f=100:t=q:w=1:g=1',
    'lowpass=f=14000'
]);

Artılar: Tüm efektler korunuyor

Eksiler: %70-80 başarı, hala risk var

💡 Öneri: Seçenek 2 ile başlayın. Eğer kullanıcılar "stereo dar" derse, Seçenek 3'ü deneyin.

🧹 Toplu Temizlik ve Yeniden Conversion

1.

Bozuk şarkıları tespit et

FFmpeg error loglarını kontrol et
fragParsingError veren song_id'leri listele
2.

FFmpeg filtrelerini değiştir

ConvertToHLSJob.php → $audioFilters değişkeni
3.

Tüm HLS dosyalarını sil

storage/tenant1001/app/public/muzibu/hls/* → DELETE
(Veya sadece bozuk olanları)
4.

Cloudflare cache'i temizle

Purge Everything (veya sadece *.ts ve *.m3u8)
5.

Toplu HLS conversion

php artisan muzibu:bulk-convert-hls

🧪 Test Stratejisi

Filtre değişikliği sonrası test adımları:

1. Song ID 36102'yi (Everything Moves) yeniden convert et

2. İlk 30 saniyeyi tarayıcıda çal → Hata var mı?

3. Aynı şarkıyı farklı tarayıcıda dene (cache test)

4. Console'da fragParsingError kontrolü

5. Başarılıysa → 10-20 rastgele şarkı daha test et

6. Tümü başarılıysa → Toplu conversion başlat

📌 Özet

Sorun: FFmpeg audio filtreleri (özellikle stereotools) bazı şarkılarda tamamen bozuk HLS segment'leri üretiyor.

Sonuç: Şarkı hiç başlamıyor, 0. saniyede fragParsingError veriyor.

Çözüm: stereotools filtresini kaldır veya %5'e düşür. Sadece loudnorm kullanmak en güvenli.

Aksiyon: ConvertToHLSJob.php dosyasındaki $audioFilters değişkenini düzenle, bozuk şarkıları yeniden convert et, Cloudflare cache'i temizle.