Player Fix Acil Override Tarama v1

Player HLS Fix + Acil Format Override

HLS 404 sorunu, player tarama raporu ve .env kill switch

HLS 404 Fix Player Tarama Acil Override Git Branch Config Sistemi

🚨 HLS 404 Fix — Cache Busting Sorunu

Basit Anlatım (Herkes İçin)

Player, şarkıyı yüklerken URL'nin sonuna &v=zaman_damgası ekliyordu (tarayıcı önbelleğini atlatmak için). Ama bu ek parametre, sunucudaki imza doğrulamasını bozuyordu. Sunucu "bu URL'yi tanımıyorum" deyip 404 hatası döndürüyordu. Player sessizce MP3'e düşüyordu — kimse fark etmedi çünkü müzik çalıyordu, ama HLS hiç çalışmıyordu.

Teknik Detay

URL Sonuç
master.m3u8?expires=...&token=1&sig=... 200 OK
master.m3u8?expires=...&token=1&sig=...&v=1771806434340 404 Not Found

Sorunlu Kod (player-core.js:5321-5328)

// 🔥 CACHE BYPASS: Add timestamp to playlist URL to force fresh fetch
const cacheBustedUrl = normalizedUrl.includes('?')
    ? normalizedUrl + '&v=' + Date.now()
    : normalizedUrl + '?v=' + Date.now();

const blobUrl = await createHlsBlobUrl(cacheBustedUrl);

Düzeltilmiş Kod

// NOT: Cache-busting (&v=timestamp) EKLEME — signed URL imzasını bozar → 404
const blobUrl = await createHlsBlobUrl(normalizedUrl);

Etkisi

  • Öncesi: Tüm HLS istekleri 404 → player MP3 fallback'e düşüyor → HLS hiç çalışmıyordu
  • Sonrası: HLS signed URL bozulmadan gidiyor → 200 OK → 4 varyantlı adaptive bitrate çalışıyor
  • Dosya: public/themes/muzibu/js/player/core/player-core.js

🔍 Player Güvenlik Taraması (8.678 Satır)

Basit Anlatım (Herkes İçin)

HLS 404 hatası düzeltildikten sonra, player kodunun tamamı (8.678 satır) taranarak benzer başka hata olup olmadığı kontrol edildi. Signed URL'yi bozabilecek, HLS çalışmasını engelleyebilecek tüm alanlar tek tek incelendi. Sonuç: Temiz. Başka kritik hata bulunamadı.

Taranan Alan Sonuç
createHlsBlobUrl() — signed URL işleme Doğru
normalizeKeyUrl() — key URL parametreleri &v= ve &level= siliniyor
appendMzParam() — _mz= parametresi Sadece API'ye, HLS'e değil
Segment URL'leri — token ekleme Eklenmiyor (AES-128 yeterli)
Variant playlist URL'leri — query string Çift query string koruması var
Key URI dönüşümü — enc.bin → /hls-key/ Doğru
loadSource() çağrıları Blob URL kullanıyor
ABR level switching _rawHls ile Alpine proxy bypass
401/403 retry mekanizması 3 deneme limiti
Expired URL tespiti expires parametresi kontrol ediliyor
_lastHlsUrl recovery Her zaman orijinal signed URL
CORS header'ları Doğru
Origin normalizasyonu (www vs non-www) Doğru
Blob URL memory leak Cleanup var

0

Kritik Hata

1

Uyarı (önemsiz)

14

Doğru Alan

🚨 Acil Format Override (.env Kill Switch)

Basit Anlatım (Herkes İçin)

HLS veya herhangi bir format sorun çıkardığında, .env dosyasına tek satır ekleyerek tüm kullanıcıları (admin, root, premium dahil) anında istenen formata geçirebilirsiniz. Hiçbir kod değişikliği gerekmez. config:cache çalıştırdığınız an aktif olur.

.env Değeri Etki
MUZIBU_AUDIO_FORCE= (boş) Devre dışı — normal akış
MUZIBU_AUDIO_FORCE=mp3_original Herkes orijinal MP3 dinler (en güvenli)
MUZIBU_AUDIO_FORCE=mp3_128 Herkes 128kbps MP3 dinler
MUZIBU_AUDIO_FORCE=mp3_64 Herkes 64kbps MP3 dinler
MUZIBU_AUDIO_FORCE=hls Herkes HLS adaptif dinler
MUZIBU_AUDIO_FORCE=hls_soft Herkes düşük kalite HLS dinler (ultralow+low)

Karar Zinciri (Öncelik Sırası)

🚨
1. .env FORCE — En yüksek, herkesi ezer
↓ (boşsa)
🧪
2. _mz= URL override — Sadece root test
↓ (yoksa)
👤
3. audio_preference — Kullanıcı bazlı admin ataması
↓ (auto ise)
📱
4. Cihaz tespiti — Mobil/Tablet/PC otomatik
🖥️
5. PC → HLS — Varsayılan

Acil Kriz Senaryosu

# HLS patladı! Herkesi orijinal MP3'e geçir (30 saniye):
echo "MUZIBU_AUDIO_FORCE=mp3_original" >> .env
php artisan config:cache
# Bitti! Artık herkes orijinal MP3 dinliyor.

# Kriz bitti, normal akışa dön:
# .env'den MUZIBU_AUDIO_FORCE satırını sil veya boş bırak
php artisan config:cache
# Bitti! Normal karar zinciri devrede.

Değişen Dosyalar

Dosya Değişiklik
Modules/Muzibu/config/config.php force_format key eklendi — env('MUZIBU_AUDIO_FORCE')
SongStreamController.php resolveAudioFormat() en başına force kontrolü eklendi
SongStreamController.php MP3 kalite belirleme: force aktifse kaliteyi force_format'tan okuyor
SongStreamController.php HLS soft mode: hls_soft force ile de aktif oluyor

Önemli Notlar

  • config:cache sonrası anında aktif olur
  • • Admin, root, premium fark etmez — herkes override edilir
  • • Orijinal MP3'lere dokunmaz, sadece stream yönlendirmesini değiştirir
  • • Production'da acil durum için idealdir — kod değişikliği gerektirmez
  • • Boş bırakıldığında hiçbir etkisi yoktur, normal akış devam eder

📦 Git Branch: hls-4sn-standardization

Basit Anlatım

HLS standardizasyon dosyaları GitHub'a ayrı bir branch olarak yüklendi. Production'da main branch'e dokunmadan sadece ihtiyaç duyulan 3 dosya çekilebilir.

Branch Bilgileri

  • Repo: https://github.com/turkbil/muzibu
  • Branch: hls-4sn-standardization
  • Base: origin/main üzerine +342 satır

Branch İçeriği (3 Dosya)

Dosya Ne Eklendi
AddHlsVariantsCommand.php --mp3-128, --mp3-64, --refresh-master, --re-encode-high, ultralow, reEncodeHigh()
HLSService.php generateMp3128(), generateMp364(), 4sn segment, -ar 48000 -ac 2
ConvertToHLSJob.php -profile:a aac_low -ar 48000 -ac 2 standardizasyon

Production'da Kullanım

# main'e dokunmadan sadece 3 dosyayı çek:
git fetch origin hls-4sn-standardization
git checkout origin/hls-4sn-standardization -- \
    Modules/Muzibu/App/Console/Commands/AddHlsVariantsCommand.php \
    app/Services/Muzibu/HLSService.php \
    Modules/Muzibu/App/Jobs/ConvertToHLSJob.php

⚙️ Tüm Audio Config Sistemi

Basit Anlatım (Herkes İçin)

Müzik formatı (HLS veya MP3) ve kalitesi birden fazla seviyede kontrol edilebilir. En üstteki .env ayarı her şeyi ezer. Hiçbir .env ayarı yoksa, admin kullanıcı bazlı ayar yapar. O da yoksa cihaz tipine göre otomatik karar verilir.

.env Ayarları (config/config.php)

.env Değişkeni Varsayılan Açıklama
MUZIBU_AUDIO_FORCE boş (devre dışı) ACİL OVERRIDE — Herkesi zorla bu formata geçir. Değerler: mp3_original, mp3_128, mp3_64, hls, hls_soft
MUZIBU_DEFAULT_AUDIO_FORMAT auto Varsayılan format. auto = cihaza göre karar, hls = hep HLS, mp3 = hep MP3
MUZIBU_CORPORATE_MP3_THRESHOLD 50 Kurumsal hesaplarda bu sayıdan fazla kullanıcı varsa otomatik MP3 moduna geç
MUZIBU_SOFT_PLAYER_VARIANTS ultralow,low Soft player'da izin verilen HLS kaliteleri (virgülle ayrılmış)

audio_preference (Kullanıcı Bazlı — Admin Panelden Atanır)

Admin panelde her kullanıcıya ayrı ayrı atanabilir. users tablosundaki audio_preference alanı.

Değer Format Kalite Açıklama
auto Otomatik Otomatik Cihaz tespitine bırak (varsayılan)
hls_auto HLS Adaptif HLS tüm varyantlar (ultralow→high otomatik geçiş)
hls_soft HLS Düşük HLS sadece ultralow+low (bant genişliği tasarrufu)
hls_32 HLS 32kbps HLS sadece ultralow varyant (sabit)
hls_64 HLS 64kbps HLS sadece low varyant (sabit)
hls_128 HLS 128kbps HLS sadece mid varyant (sabit)
mp3_128 MP3 128kbps MP3 128k stereo
mp3_64 MP3 64kbps MP3 64k mono (son çare)
mp3_auto MP3 Otomatik Cihaz güçlüyse 128k, zayıfsa 64k

_mz= Test Parametresi (Sadece Root Kullanıcılar)

URL'ye ?_mz=kod ekleyerek format ve kaliteyi test et. Sadece root rolündeki kullanıcılar kullanabilir.

Parametre Format Açıklama
?_mz=h0 HLS HLS adaptif (tüm varyantlar)
?_mz=h3 HLS HLS test
?_mz=hsoft HLS Soft HLS düşük kalite (ultralow+low)
?_mz=s0 MP3 Orijinal MP3
?_mz=s6 MP3 MP3 64kbps
?_mz=s12 MP3 MP3 128kbps

Otomatik Cihaz Tespiti (audio_preference = auto ise)

Cihaz mz_device Cookie Sonuç
PC / Laptop HLS Adaptif
Mobil / Tablet (güçlü) good HLS Adaptif
Mobil / Tablet (zayıf) weak MP3

mz_device cookie: Frontend JS tarafından ölçülür. RAM ≥4GB + CPU ≥4 core + 4G bağlantı = good, aksi halde weak. 24 saat geçerli. bootstrap/app.php'de encrypt istisnası var.

İlgili Dosyalar

23 Şubat 2026 • Muzibu.com.tr