HLS 404 sorunu, player tarama raporu ve .env kill switch
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.
| URL | Sonuç |
|---|---|
master.m3u8?expires=...&token=1&sig=... |
200 OK |
master.m3u8?expires=...&token=1&sig=...&v=1771806434340 |
404 Not Found |
// 🔥 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);
// NOT: Cache-busting (&v=timestamp) EKLEME — signed URL imzasını bozar → 404
const blobUrl = await createHlsBlobUrl(normalizedUrl);
public/themes/muzibu/js/player/core/player-core.jsHLS 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
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) |
# 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.
| 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 |
config:cache sonrası anında aktif olurHLS standardizasyon dosyaları GitHub'a ayrı bir branch olarak yüklendi. Production'da main branch'e dokunmadan sadece ihtiyaç duyulan 3 dosya çekilebilir.
https://github.com/turkbil/muzibuhls-4sn-standardizationorigin/main üzerine +342 satır| 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 |
# 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
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 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ış) |
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 |
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 |
| 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.
Modules/Muzibu/config/config.php — Tüm .env ayarları burada tanımlıSongStreamController.php:resolveAudioFormat() — Format karar zinciri (force → _mz → preference → cihaz)SongStreamController.php:stream() — MP3 kalite belirleme + HLS soft/level lockplayer-core.js — Frontend format tespiti, mz_device cookiebootstrap/app.php — mz_device cookie encrypt istisnası