v3 — Guncel Akis

Soft Mode & Audio Karar Sistemi

Muzibu Ses Platformu — Tum Akis, Tum Parametreler

23 Subat 2026 — 12 Bolum

v3 YENİLİKLER Corporate threshold aktif | Zayıf mobil → Soft HLS | Debug overlay

İçindekiler

1. Basit Anlatım (Herkes İçin)

Muzibu'da müzik iki farklı yöntemle gönderilebilir:

BÜTÜN (MP3)

Şarkı tek seferde, komple indirilir. Tıpkı bir fotoğraf indirmek gibi — ya gelir ya gelmez.

Kalite: 64 kbps, 128 kbps veya orijinal

PARÇALI (HLS)

Şarkı küçük parçalara bölünerek gönderilir. Netflix gibi — internet hızına göre kaliteyi otomatik ayarlar.

4 seviye: 32, 64, 128 kbps + orijinal

SOFT (HLS Lite)

HLS'nin hafifletilmiş hali. Yüksek kalite seçenekleri kaldırılır, sadece düşük kaliteler kalır.

Varsayılan: ultralow + low + mid

Soft Mode neden var? İnternet bağlantısı zayıf olan ortamlarda (kafeler, metrolar, kırsal bölgeler) yüksek kaliteye geçiş yapılmasını engellemek için. Böylece şarkı hiç takılmaz — ama yine de iki seviye arasında otomatik geçiş yapar (sabit MP3'ten üstün).

Kurumsal hesap ne zaman MP3'e geçer? Bir şirketin Muzibu hesabında 50'den fazla kullanıcı varsa, sunucu yükünü azaltmak için tüm kullanıcılar otomatik olarak MP3 formatına geçer. Bu eşik ENV'den ayarlanabilir.

2. Tüm Format Seçenekleri — Detaylı Tablo

Seçenek Gönderim Soft? ABR? Şifreli? Açıklama
auto Değişken Cihaz + internet'e göre otomatik karar
mp3_64 Bütün Hayır Hayır Hayır Sabit 64 kbps MP3. En düşük kalite, en az veri.
mp3_128 Bütün Hayır Hayır Hayır Sabit 128 kbps MP3. Orta kalite.
mp3_auto Bütün Hayır Hayır Hayır Cihaz güçlüyse 128k, zayıfsa 64k MP3.
hls_soft Parçalı EVET Evet AES-128 Soft Mode! master.m3u8'den high kaldırılır. ENV'de ayarlanabilir.
hls_soft_mobile Parçalı EVET Evet AES-128 YENİ Zayıf mobil/tablet → otomatik soft HLS
hls_32 Parçalı Hayır Kilitli AES-128 Sadece ultralow (32k). Level lock, ABR yok.
hls_64 Parçalı Hayır Kilitli AES-128 Sadece low (64k). Level lock, ABR yok.
hls_128 Parçalı Hayır Kilitli AES-128 Sadece mid (128k). Level lock, ABR yok.
hls_auto Parçalı Hayır 4 seviye AES-128 Tüm seviyeler açık, ABR serbest. En güçlü mod.

3. Normal HLS vs Soft HLS — Ne Değişiyor?

Normal HLS (hls_auto)

high orijinal kalite ~256 kbps
mid 128 kbps
low 64 kbps
ultralow 32 kbps

4 seviye arası otomatik geçiş (ABR)

Soft HLS (hls_soft) — Varsayılan ENV

high kaldırıldı
mid 128 kbps aktif
low 64 kbps aktif
ultralow 32 kbps aktif

3 seviye: ultralow + low + mid (max 128 kbps)

ENV: MUZIBU_SOFT_PLAYER_VARIANTS=ultralow,low,mid

Dikkat: Soft modda hangi varyantların kalacağı MUZIBU_SOFT_PLAYER_VARIANTS ile belirlenir. Varsayılan ultralow,low,mid. Sadece ultralow,low yazarsan mid de kaldırılır.

4. Audio Format Karar Zinciri — Güncel Akış v3 GÜNCEL

Dosya: SongStreamController.php → resolveAudioFormat() — Her stream isteğinde bu zincir çalışır:

Adım -1: Acil Override (Kill Switch)
MUZIBU_AUDIO_FORCE doluysa → herkesi (admin dahil) zorla bu formata geçir
$forceFormat = config('muzibu.audio.force_format');
if ($forceFormat) → mp3_* = 'mp3', hls_* = 'hls' // Zincir BURADA biter
Adım 0: Root Test Override (?_mz=...)
URL'de ?_mz=hsoft veya ?_mz=s6 gibi parametre varsa ve kullanıcı root ise → test formatını kullan
Adım 1: Admin Kullanıcı Tercihi (audio_preference)
Admin panelden kullanıcıya atanan tercih. auto değilse → o tercihi kullan
Değerler: mp3_64, mp3_128, mp3_auto, hls_32, hls_64, hls_128, hls_auto, hls_soft
Adım 2: Kurumsal Hesap Kontrolü
YENİ
Kullanıcının corporate_account_id varsa ve o hesapta 50'den fazla kullanıcı varsa → otomatik MP3
$corpThreshold = config('muzibu.audio.corporate_mp3_threshold', 50);
$corpAccountId = $user->corporate_account_id;
if ($corpAccountId && DB::table('users')
    ->where('corporate_account_id', $corpAccountId)->count() > $corpThreshold)
    → return 'mp3'; // Sunucu yükü koruması

Neden? 50+ kişilik kurumsal hesapta herkes HLS dinlerse sunucu segment istekleriyle dolar. MP3 tek dosya olduğundan sunucu yükü çok daha az.

Eşik: MUZIBU_CORPORATE_MP3_THRESHOLD=50 (ENV'den ayarlanabilir)

Adım 3: Mobil/Tablet Tespiti
GÜNCELLEME
jenssegers/agent ile User-Agent parse. Mobil veya tablet ise:
$deviceCap = request()->cookie('mz_device', 'weak');

if ($deviceCap === 'good')
    → return 'hls'; // Güçlü telefon → TAM kalite HLS
else
    → return 'hls_soft_mobile'; // Zayıf telefon → Soft HLS
Cihaz mz_device Sonuç Açıklama
Mobil good HLS TAM RAM≥4GB + CPU≥4 + 4G → kaliteli müzik
Mobil weak SOFT HLS Zayıf telefon → soft HLS (takılmaz, 3 seviye ABR)
Mobil yok SOFT HLS Cookie yoksa varsayılan = weak → soft
Tablet good HLS TAM Güçlü tablet → tam HLS
Tablet weak SOFT HLS Zayıf tablet → soft HLS

v3 değişiklik: Eskiden zayıf mobil → MP3 128kbps alıyordu. Artık → Soft HLS alıyor. Böylece zayıf telefonlar da şifreli + adaptif streaming'den faydalanıyor (sadece düşük kalite seviyeleri ile).

Adım 4: PC → HLS
Masaüstü/Laptop → her zaman hls (full ABR, 4 seviye). Cookie kontrol edilmez.

Akış Özeti (Bir Bakışta)

FORCE? ──── evet ──→ Zorla format (mp3/hls/hls_soft) ■ BİTTİ
  │ hayır
ROOT _mz? ── evet ──→ Test formatı uygula ■ BİTTİ
  │ hayır
PREF? ───── auto değil → Kullanıcı tercihi ■ BİTTİ
  │ auto
CORPORATE? ─ >50 kişi → MP3 ■ BİTTİ
  │ hayır/yok
MOBİL? ───── good ───→ HLS TAM (4 seviye) ■ BİTTİ
  │            weak ───→ SOFT HLS (3 seviye) ■ BİTTİ
  │ PC
PC ────────────────→ HLS TAM (4 seviye) ■ BİTTİ

5. Soft Mode vs Level Lock — Fark Ne?

Özellik Soft Mode (hls_soft) Level Lock (hls_32/64/128)
Kullanılan variant sayısı 3 (varsayılan: ultralow+low+mid) 1 (sadece seçilen)
ABR (otomatik geçiş) EVET (3 seviye arası) HAYIR (sabit)
Max kalite 128 kbps (ENV'den ayarlanır) Seçime bağlı (32/64/128)
İnternet kötüleşirse 128→64→32'ye düşer (takılmaz) Düşemez, takılabilir
Şifreleme AES-128 (aynı key, farklı IV) AES-128 (aynı key, farklı IV)
Token flag userId.s userId.u / .l / .m / .h
Kullanım senaryosu İnternet dalgalı, bazen iyi bazen kötü İnternet sürekli aynı hızda ama düşük

6. Admin Panel — Format Tercihi Dropdown

Dosya: user-manage-component.blade.php:184 — Kullanıcı düzenleme sayfasında:

--- Genel ---
  auto — 0 — Varsayılan (cihaz+internet otomatik)
--- Bütün (MP3) ---
  mp3_64 — 1. Seviye — En sorunlu müşteri
  mp3_128 — 2. Seviye — Sorunlu müşteri
  mp3_auto — Auto — Normal internet, normal cihaz
--- Parçalı (HLS) ---
  hls_32 — 1. Seviye — İnternet çok sorunlu (32k kilitli)
  hls_64 — 2. Seviye — İnternet sorunlu (64k kilitli)
  hls_soft — 1+2+3. Seviye — Soft — İnternet sorunlu ama cihaz iyi
  hls_128 — 3. Seviye — İyi cihaz, normal internet (128k kilitli)
  hls_auto — 0 — Auto — İyi cihaz, iyi internet (4 seviye ABR)

Bu ayar users.audio_preference alanına yazılır. Sadece Muzibu tenant'ında (1001) görünür.

7. Mobilde Ne Oluyor? — Güncel Durum v3 GÜNCEL

Mobil/Tablet tespiti jenssegers/agent kütüphanesi ile yapılır. UA hash'i 24 saat cache'lenir.

Cihaz mz_device Format Kalite Soft? Açıklama
Mobil good HLS 4 seviye ABR Hayır Güçlü telefon → tam kalite HLS
Mobil weak SOFT 3 seviye ABR EVET Zayıf telefon → soft HLS YENİ
Mobil yok SOFT 3 seviye ABR EVET Cookie yoksa varsayılan = weak → soft
Tablet good HLS 4 seviye ABR Hayır Güçlü tablet → tam HLS
Tablet weak SOFT 3 seviye ABR EVET Zayıf tablet → soft HLS YENİ
PC HLS 4 seviye ABR Hayır PC her zaman HLS (cookie kontrol edilmez)
ESKİ → YENİ

Eski: Zayıf mobil → MP3 128kbps (şifresiz, tek dosya)

Yeni: Zayıf mobil → Soft HLS (şifreli, 3 seviye ABR)

Neden bu değişiklik?
MP3 şifresiz olduğundan kopyalanabilir. Soft HLS ise şifreli + adaptif. Zayıf telefon bile 32-64-128 kbps arası otomatik geçiş yaparak takılmadan dinleyebilir.

8. mz_device Cookie Sistemi

Dosya: player-core.js:110-143 — Sayfa yüklendiğinde JS ile hesaplanır:

Kriter 1: RAM

navigator.deviceMemory
≥ 4 GB → +1 puan
< 4 GB → 0 puan
Sadece Chrome/Edge/Opera destekler

Kriter 2: CPU

navigator.hardwareConcurrency
≥ 4 çekirdek → +1 puan
< 4 çekirdek → 0 puan

Kriter 3: Bağlantı

navigator.connection.effectiveType
4g → +1 puan
3g/2g/slow-2g → 0 puan
Network Info API gerekli
// Karar
const capability = score >= 2 ? 'good' : 'weak';
// Cookie yaz — 24 saat TTL
document.cookie = 'mz_device=' + capability + '; expires=24h; path=/; SameSite=Lax';
good (2+ puan)
Mobil/Tablet: Tam HLS (4 seviye ABR, şifreli, adaptif)
PC: Cookie kontrol edilmez, her zaman HLS
weak (0-1 puan)
Mobil/Tablet: Soft HLS (3 seviye ABR: 32+64+128 kbps, şifreli)
PC: Cookie kontrol edilmez, her zaman HLS
Not: Cookie sadece bir kere hesaplanır (sayfa yüklendiğinde). Zaten varsa tekrar hesaplanmaz. 24 saat sonra süresi dolunca yeniden hesaplanır. EncryptCookies istisnasında: bootstrap/app.php:51

9. ENV Ayarları (11 Parametre)

Tüm MUZIBU_ ile başlayan ENV değişkenleri tek blokta. Değişiklik sonrası: php artisan config:cache

# ENV Değişkeni Değer Açıklama
1 MUZIBU_DEFAULT_AUDIO_FORMAT auto Varsayılan format (auto/hls/mp3)
2 MUZIBU_AUDIO_FORCE (boş) Acil override — doldurursan HERKESİ zorlar
3 MUZIBU_HLS_TIMEOUT 2 HLS başarısız → MP3 fallback bekleme (sn)
4 MUZIBU_SOFT_PLAYER_VARIANTS ultralow,low,mid Soft modda izin verilen HLS kaliteleri
5 MUZIBU_CROSSFADE_DURATION 7000 Crossfade süresi (ms) — 0=kapalı
6 MUZIBU_SESSION_POLLING 30000 Session polling aralığı (ms)
7 MUZIBU_SESSION_TTL 7200 Redis session süresi (sn)
8 MUZIBU_CACHE_PREMIUM_TTL 300 Premium durum cache (sn)
9 MUZIBU_CACHE_SONG_TTL 86400 Şarkı cache süresi (sn = 24h)
10 MUZIBU_DEVICE_LIMIT 1 Eşzamanlı cihaz limiti
11 MUZIBU_CORPORATE_MP3_THRESHOLD 50 Kurumsal hesap MP3 eşiği AKTİF

10. Kill Switch — Acil Override (MUZIBU_AUDIO_FORCE)

Herhangi bir acil durumda (HLS çöktü, sunucu yükü arttı, bug) tüm kullanıcıları tek satırla başka formata geçirebilirsin:

Değer Format Etki
(boş) Normal akış — karar zinciri çalışır
mp3_original MP3 Herkes orijinal MP3 dinler. HLS tamamen kapalı.
mp3_128 MP3 Herkes 128kbps MP3 dinler.
mp3_64 MP3 Herkes 64kbps MP3 dinler. En düşük bant genişliği.
hls HLS Herkes tam HLS dinler (4 seviye ABR).
hls_soft SOFT Herkes soft HLS dinler (varsayılan: ultralow+low+mid).
# Örnek: HLS sorun çıkardı, herkesi MP3'e geçir
MUZIBU_AUDIO_FORCE=mp3_original
php artisan config:cache
# Sorun düzeldi, normal akışa dön
MUZIBU_AUDIO_FORCE=
php artisan config:cache

11. Test Parametreleri (_mz) — Sadece Root

URL'ye ?_mz=kod eklenerek root kullanıcı herhangi bir formatı test edebilir:

MP3 Testleri (s = soft/mp3)

?_mz=s6 MP3 64kbps
?_mz=s12 MP3 128kbps (varsayılan)
?_mz=s0 MP3 Orijinal

HLS Testleri (h = hls)

?_mz=h3 HLS ultralow (32k kilitli)
?_mz=h6 HLS low (64k kilitli)
?_mz=h12 HLS mid (128k kilitli)
?_mz=h0 HLS high (orijinal kilitli)
?_mz=hsoft HLS Soft Mode testi

Token Flag Sistemi: _mz parametresi backend'de signed URL'nin token kısmına gömülür. Örnek: token=5.s (userId=5, flag=s=soft). Flag'ler: s=soft, u=ultralow, l=low, m=mid, h=high. serveHls() bu flag'i okuyup master.m3u8'den ilgili varyantları filtreler.

12. Sorunlar & Durum v3 GÜNCEL

ÇÖZÜLDÜ MUZIBU_CORPORATE_MP3_THRESHOLD artık aktif

Eski: config/config.php:55'te tanımlıydı ama resolveAudioFormat() içinde hiçbir yerde kontrol edilmiyordu. Ölü ayardı.

Yeni: Karar zincirinin Adım 2'sine eklendi. Kurumsal hesapta 50'den fazla kullanıcı varsa otomatik MP3'e geçiyor. try-catch ile korumalı (test ortamında kolon yoksa hata vermez).

ÇÖZÜLDÜ Zayıf mobil artık Soft HLS alıyor

Eski: Zayıf mobil (mz_device=weak) → MP3 128kbps. Soft mode hiçbir zaman otomatik devreye girmiyordu.

Yeni: Zayıf mobil → hls_soft_mobile (Soft HLS). Şifreli, 3 seviye ABR (32+64+128 kbps). Güçlü mobil hâlâ tam HLS.

BİLGİ Safari'de mz_device cookie kısıtlaması

navigator.deviceMemory Safari'de desteklenmiyor → bu kriter her zaman 0. Sadece CPU + bağlantı kalır.

Safari'de güçlü bir iPhone bile weak çıkabilir (2 kriter yerine max 2 — eşik geçiyor ama marj az).

Etki: Sorun değil — telefonda MP3'e inmek yerine artık Soft HLS alıyor. Soft HLS de gayet iyi çalışır.

ÇÖZÜLDÜ v1 raporundaki soft = "ultralow+low" düzeltildi

v1 raporunda soft modda sadece 2 seviye (ultralow+low) gösteriliyor. Gerçekte MUZIBU_SOFT_PLAYER_VARIANTS=ultralow,low,mid3 seviye. v2'de düzeltildi.

ÇÖZÜLDÜ Debug bilgisinde is_soft + root-only overlay

Eski: _debug_format'ta soft_player boştu. Debug bilgisi sadece console.log ile gösteriliyordu (herkes görebilir).

Yeni: is_soft ve corporate_id alanları eklendi. Debug bilgisi artık root kullanıcıya görsel overlay (sağ alt köşe, 5sn sonra kaybolur) olarak gösteriliyor. Console.log yerine DOM elementi.

Durum Özeti

ÇÖZÜLDÜ 4 sorun düzeltildi (1, 2, 4, 5)
BİLGİ 1 bilinen kısıtlama (Safari, sorun değil)

23 Şubat 2026 • Muzibu.com.tr

v3 — Güncel akış (corporate, mobil soft, debug overlay) | v2: Kapsamlı analiz | v1: İlk analiz