Fade-In/Fade-Out + HLS Conversion Pipeline
Ne Yapıyoruz?
Muzibu'ya yüklenen şarkıların başlangıcında ve sonunda ses yumuşak bir şekilde açılıp kapanacak.
Profesyonel müzik platformlarında olduğu gibi şarkı aniden başlamayacak, yavaşça fade-in (ses açılma)
yapacak. Şarkı bitişinde de aniden kesilmeyecek, fade-out (ses kapanma) ile yumuşak bitecek.
Nasıl Çalışacak?
Kullanıcı şarkı yüklediğinde sistem 3 adımda işlem yapacak:
Neden Önemli?
✅ Profesyonel dinleme deneyimi (Spotify, Apple Music gibi)
✅ Orijinal dosyalar korunuyor (arşiv güvencesi)
✅ Gerekirse efekt ayarları değiştirilebilir (orijinal durduğu için)
✅ Disk alanı tasarrufu (geçici dosyalar temizleniyor)
Kullanıcı Fark Eder Mi?
Hayır! Upload süresi sadece birkaç saniye uzar. İşlem arka planda queue sistemi ile yapılır,
kullanıcı beklemez. Şarkı dinlenirken ise zaten işlenmiş HLS versiyonu çalınır.
Audio processing için açık kaynak multimedia framework. Fade-in/fade-out efektleri ve HLS conversion işlemlerini yapar.
Arka plan işleme sistemi. Upload sonrası işlemler queue'da çalışır, kullanıcı beklemez.
HTTP Live Streaming. Şarkılar küçük segment'lere (.ts) bölünür, adaptive streaming sağlar.
Tenant-aware storage. Her tenant'ın kendi storage klasörü (storage/tenant1001/app/public/songs/).
Tenant Database: tenant_muzibu_1528d0
Tablo: songs
Yeni Field'ler (eklenmeli):
original_file - Orijinal MP3 path (arşiv)hls_path - HLS .m3u8 playlist pathfade_duration - Fade süresi (saniye, default: 3)processing_status - pending/processing/completed/failedKullanıcı admin panelden şarkı yükler. Dosya tipi, boyut, format kontrolleri yapılır.
İşlemler:
Yüklenen dosya orijinal haliyle storage'a kaydedilir. Bu dosya arşiv amaçlıdır, asla silinmez.
Kayıt Konumu:
storage/tenant1001/app/public/songs/originals/song-{id}.mp3
Database Kaydı:
Arka planda queue job tetiklenir. Orijinal dosyadan kopya oluşturulur, fade efekti eklenir.
FFmpeg Komutu (Örnek):
ffmpeg -i original.mp3 \
-af "afade=t=in:st=0:d=3,afade=t=out:st=[duration-3]:d=3" \
-c:a libmp3lame -b:a 320k \
processed.mp3
Parametreler:
afade=t=in:st=0:d=3 → Baştan 3 saniye fade-inafade=t=out:st=[duration-3]:d=3 → Sondan 3 saniye fade-out-b:a 320k → Kalite (320 kbps önerilen)Geçici Dosya:
storage/tenant1001/temp/song-{id}-processed.mp3
İşlenmiş (fade'li) MP3 dosyası HLS formatına dönüştürülür. Şarkı segment'lere (.ts) bölünür.
FFmpeg HLS Komutu (Örnek):
ffmpeg -i processed.mp3 \
-c:a aac -b:a 128k \
-f hls -hls_time 10 -hls_list_size 0 \
-hls_segment_filename "segment_%03d.ts" \
playlist.m3u8
Çıktı Dosyaları:
playlist.m3u8 → HLS playlist (stream URL'i bu olacak)segment_000.ts, segment_001.ts... → Audio segment'leriKayıt Konumu:
storage/tenant1001/app/public/songs/hls/song-{id}/
HLS conversion tamamlandıktan sonra geçici işlenmiş MP3 dosyası silinir. Disk tasarrufu sağlanır.
Silinen Dosya:
storage/tenant1001/temp/song-{id}-processed.mp3
Kalıcı Dosyalar:
Database güncellenir, şarkı stream'e hazır hale gelir.
Database Güncelleme:
Stream URL (Frontend):
https://muzibu.com/storage/songs/hls/song-123/playlist.m3u8
~8 MB
Kalıcı arşiv
~8 MB
Streaming dosyaları
0 MB
Otomatik silindi
💡 Not: Her şarkı için 2 kopya kalıyor (orijinal + HLS). Geçici işlenmiş dosyalar temizlendiği için %33 disk tasarrufu sağlanıyor.
Admin panelde "Muzibu Settings" bölümüne fade ayarları ekle:
Song edit sayfasına özel kontroller:
Mevcut şarkıları toplu güncelleme:
php artisan muzibu:reprocess-songsİşlem takibi için:
FFmpeg hatalarında: