Tüm Raporlar / Format Seçim Stratejisi

Format Seçim Stratejisi & Soft Mode Aktivasyon

HLS / MP3 / Otomatik — Kim neyi, nasıl belirleyecek?

21 Şubat 2026 v1 Planlama

Amaç

Ne istiyoruz? Müzik çalma formatını (HLS veya MP3) esnek bir şekilde kontrol edebilmek. Hem platform genelinde, hem kurumsal hesaplarda, hem de bireysel kullanıcı bazında.

Basit anlatım: HLS = yüksek kaliteli ama ağır sistem (şifreleme, parçalama, çoklu istek). MP3 = hafif, hızlı, tek istek ile çalar ama şifreleme yok. Bazı ortamlarda HLS gereksiz yere yavaşlatıyor — bunu akıllıca seçebilmek istiyoruz.

Ek olarak: Soft Mode (hafif mod) nasıl aktifleşecek? Kullanıcı mı seçecek, sistem mi otomatik algılayacak? Bu kararı da bu raporda tasarlıyoruz.


Mevcut Durum

Şu an format seçimi tamamen otomatik ve tek katmanlı çalışıyor:

Şu Anki Akış

1

Kullanıcı şarkıyı çalar

Frontend → API isteği gönderir

2

Sunucu kontrol eder: HLS dönüştürmesi yapılmış mı?

Şarkının hls_path alanı dolu mu?

HLS dönüştürülmüş → stream_type: 'hls'

Şifreli, parçalı akış — 4 ardışık istek gerekir

HLS yok → stream_type: 'mp3'

Doğrudan MP3 — tek istek, hızlı başlar

Sorunlar

  • Kullanıcı veya yönetici format seçemiyor — sistem otomatik karar veriyor
  • Kurumsal hesaplar için toplu ayar yok — her üye aynı mantıkla çalışıyor
  • Platform genelinde varsayılan format belirlenemiyor (ENV yok)
  • Eski/yavaş cihazlarda HLS gereksiz yere ağırlık yapıyor ama MP3'e geçiş yolu yok
  • force_mp3 parametresi var ama sadece API'de — kullanıcı arayüzünde yok

Format Seçim Hiyerarşisi

Yeni sistemde format seçimi 4 katmanlı bir öncelik sırasıyla belirlenecek. Üstteki katman alttakini ezer — ama sadece açık bir tercih yapılmışsa.

1

Kullanıcı Tercihi

EN YÜKSEK ÖNCELİK

Kullanıcı kendi profilinden veya player ayarlarından HLS, MP3 veya Otomatik seçebilir.

Otomatik
Alttaki katmanlara bırak
HLS
Her zaman HLS kullan
MP3
Her zaman MP3 kullan

Önemli: Kullanıcı "HLS" veya "MP3" seçtiyse, kurumsal hesap ayarını bile ezer. "Otomatik" seçtiyse veya hiç dokunmadıysa, sıradaki katmana geçilir.

Kullanıcı "Otomatik" ise veya tercih yapmadıysa
2

Kurumsal Hesap Ayarı

KURUM ZORLAYABİLİR

Kurumsal hesap sahibi, tüm üyeleri için format belirleyebilir. Örneğin bir kafe/restoran zinciri tüm şubelerini MP3'e zorlayabilir.

Kurum sahibi belirler:

Kurumsal panel → Ayarlar → Çalma Formatı → "MP3" seçerse tüm üyeler MP3 çalar

Üye ezebilir mi?

Evet! Üye kişisel olarak "HLS" veya "MP3" seçtiyse, kurumsal ayarı ezer. "Otomatik"te ise kurumsal geçerli.

Neden? Kafeler, restoranlar, mağazalar genellikle eski/basit cihaz kullanır. HLS'in şifreleme ve parçalama ağırlığına gerek yok — MP3 hem daha hızlı hem daha stabil.

Kurumsal hesap yoksa veya kurumsal "Otomatik" ise
3

Platform Varsayılanı (ENV)

YÖNETİCİ AYARI

Platform yöneticisi .env dosyasından tüm sistem için varsayılan format belirler.

# .env dosyasına eklenecek
MUZIBU_DEFAULT_AUDIO_FORMAT=auto
# Seçenekler: auto | hls | mp3
auto
HLS varsa HLS, yoksa MP3
hls
Tüm platformda HLS tercih
mp3
Tüm platformda MP3 tercih
ENV de "auto" ise
4

Sistem Otomatiği (Şu Anki Davranış)

FALLBACK

Hiçbir katmanda açık tercih yoksa, mevcut sistem devam eder: Şarkının HLS dönüştürmesi yapılmışsa HLS, yapılmamışsa MP3 döner. — Bugünkü davranışla aynı.

Karar Akışı — Tek Bakışta

Kullanıcı tercih = ?
  ├─ "hls"  → ✅ HLS çal (kurumsal dahil herkesi ezer)
  ├─ "mp3"  → ✅ MP3 çal (kurumsal dahil herkesi ezer)
  └─ "auto" veya boş → Sıradaki katmana bak
      │
      Kullanıcı kurumsal üye mi?
        ├─ Evet → Kurumsal format = ?
        │   ├─ "mp3"  → ✅ MP3 çal
        │   ├─ "hls"  → ✅ HLS çal
        │   └─ "auto" → Sıradaki katmana bak
        └─ Hayır → Sıradaki katmana bak
            │
            ENV MUZIBU_DEFAULT_AUDIO_FORMAT = ?
              ├─ "hls"  → ✅ HLS çal
              ├─ "mp3"  → ✅ MP3 çal
              └─ "auto" → Sıradaki katmana bak
                  │
                  Şarkının HLS dönüştürmesi var mı?
                    ├─ Evet → ✅ HLS çal
                    └─ Hayır → ✅ MP3 çal

Soft Mode Nasıl Aktif Olacak?

Soft Mode (hafif mod), player'ın eski/yavaş cihazlarda donmadan çalışması için tasarlandı. Peki bunu kullanıcı mı seçecek, sistem mi otomatik algılayacak? Cevap: İkisi birden — Hibrit Strateji.

Sadece Manuel

Kullanıcı kendisi Ayarlar → Soft Mode → Aç der.

Tam kontrol kullanıcıda
Çoğu kullanıcı ayarları bilmez
Donma yaşar, sebebini anlamaz

Sadece Otomatik

Sistem cihazı analiz eder, yavaşsa Soft Mode açar.

Kullanıcı hiçbir şey yapmaz
Yanlış algılama riski
Güçlü cihaz hafif moda girebilir

Hibrit (Önerilen)

Sistem önerir + kullanıcı onaylar/değiştirir.

Akıllı varsayılan
Kullanıcı isterse ezebilir
En iyi kullanıcı deneyimi

Hibrit Strateji Detayı

A Otomatik Algılama (İlk Ziyaret)

Kullanıcı siteye ilk geldiğinde, JavaScript cihaz profilini çıkarır:

Cihaz Sinyalleri
  • RAM: navigator.deviceMemory (4 GB altı = düşük)
  • CPU: navigator.hardwareConcurrency (4 altı = düşük)
  • Bağlantı: navigator.connection.effectiveType ('2g' veya 'slow-2g' = düşük)
  • Pil tasarrufu: navigator.getBattery() (şarjda değil + %20 altı)
Karar Eşikleri
  • RAM ≥ 4 GB + CPU ≥ 4 çekirdek → Normal Mod
  • RAM < 4 GB veya CPU < 4 → Soft Mode Öner
  • RAM ≤ 2 GB veya bağlantı 2g → Soft Mode Otomatik Aç

B Kullanıcıya Bildirim (Öneri Durumu)

Hafif Mod Önerisi

Cihazınızda daha iyi performans için hafif modu etkinleştirebilirsiniz. Müzik kalitesi aynı kalır, geçişler daha akıcı olur.

* Cihaz orta seviye algılandığında gösterilecek bildirim tasarımı

C Manuel Açma/Kapama (Her Zaman Erişilebilir)

Kullanıcı istediği zaman Soft Mode'u açıp kapatabilir — iki yol:

Player İçi Toggle

Player üzerinde ayarlar ikonu → "Hafif Mod" switch'i. Anında geçiş, sayfa yenileme gerekmez.

Profil Ayarları

Profil → Ayarlar → Çalma Modu sayfasından kalıcı olarak seçilebilir. Oturum açıldığında hatırlanır.

Soft Mode Öncelik Sırası

Kullanıcı soft_mode tercihi = ?
  ├─ "on"   → ✅ Soft Mode AÇ (kendi isteği)
  ├─ "off"  → ❌ Soft Mode KAPA (kendi isteği)
  └─ "auto" veya boş → Sıradaki katmana bak
      │
      Kurumsal hesap soft_mode = ?
        ├─ "on"  → ✅ Soft Mode AÇ (kurum zorlaması)
        ├─ "off" → ❌ Soft Mode KAPA
        └─ "auto" → Sıradaki katmana bak
            │
            ENV MUZIBU_DEFAULT_SOFT_MODE = ?
              ├─ "on"  → ✅ Soft Mode AÇ
              ├─ "off" → ❌ Soft Mode KAPA
              └─ "auto" → Sıradaki katmana bak
                  │
                  Cihaz algılama sonucu = ?
                    ├─ RAM ≤ 2GB veya 2G bağlantı → ✅ Otomatik AÇ
                    ├─ RAM < 4GB veya CPU < 4      → 💬 Kullanıcıya ÖNER
                    └─ Güçlü cihaz                 → ❌ Normal Mod

Soft Mode Ne Yapar?

Soft Mode aktif olduğunda şunlar değişir (format seçiminden bağımsız, ek optimizasyonlar):

Format → MP3

HLS yerine MP3 kullanılır (kullanıcı zaten HLS seçmediyse). Tek istek, şifreleme yok, anında çalar.

Crossfade → Açık

Şarkılar arası geçiş yumuşak olur. Önceki biterken yenisi başlar — donma hissi ortadan kalkar.

Hız Testi → Kapalı

Buffer düştüğünde 10 MB indirme tetiklenmez. Zaten yavaş internette ekstra yük binmez.

Debug Panel → Yüklenmez

180 KB'lık performance-debug.js yüklenmez. 3-4 MB RAM + render-blocking JavaScript tasarrufu.

Preload → Minimal

Sonraki şarkı önceden yüklenmez. RAM ve bant genişliği tasarrufu. Sadece şu anki şarkıya odaklanılır.

SPA Cache → Küçültülmüş

SPA cache limiti 50'den 10'a düşer. Daha az bellek kullanımı, eski sayfalar daha erken temizlenir.

Önemli Not

Format seçimi (HLS/MP3) ile Soft Mode birbirinden bağımsız ama ilişkili iki kavramdır. Kullanıcı HLS formatını seçip Soft Mode'u da açabilir — bu durumda crossfade, debug kapanması gibi optimizasyonlar uygulanır ama format HLS kalır. Soft Mode "auto" ise format otomatik olarak MP3'e döner.


Veritabanı & Konfigürasyon Değişiklikleri

Bu özellikler için gereken teknik değişiklikler. Her biri ayrı onay gerektirir.

1. Users Tablosu — Yeni Kolonlar

// Tenant migration (her tenant DB'sine)
$table->string('audio_preference', 10)
->default('auto') // 'auto' | 'hls' | 'mp3'
->after('dashboard_preferences');
$table->string('soft_mode', 10)
->default('auto') // 'auto' | 'on' | 'off'
->after('audio_preference');
audio_preference
auto = sisteme bırak | hls = daima HLS | mp3 = daima MP3
soft_mode
auto = cihaza göre algıla | on = daima açık | off = daima kapalı

2. Kurumsal Hesaplar Tablosu — Yeni Kolonlar

// muzibu_corporate_accounts tablosuna
$table->string('audio_preference', 10)
->default('auto'); // Tüm üyeler için format
$table->string('soft_mode', 10)
->default('auto'); // Tüm üyeler için Soft Mode

Kurum sahibi bu değerleri kurumsal panelden ayarlar. Tüm üyeler (şubeler dahil) etkilenir.

3. ENV Konfigürasyonu

# .env dosyasına eklenecek yeni satırlar
MUZIBU_DEFAULT_AUDIO_FORMAT=auto
# Seçenekler: auto | hls | mp3
# auto = Şarkının HLS dönüştürmesi varsa HLS, yoksa MP3
# hls = Tüm platformda HLS tercih
# mp3 = Tüm platformda MP3 tercih
MUZIBU_DEFAULT_SOFT_MODE=auto
# Seçenekler: auto | on | off
# auto = Cihaz algılamaya göre öner/aç
# on = Tüm platformda Soft Mode açık
# off = Tüm platformda Soft Mode kapalı

Değişiklik Özeti

Ne Nerede Tip Onay
audio_preference kolonu users tablosu Migration 3 aşamalı
soft_mode kolonu users tablosu Migration 3 aşamalı
audio_preference kolonu corporate_accounts tablosu Migration 3 aşamalı
soft_mode kolonu corporate_accounts tablosu Migration 3 aşamalı
MUZIBU_DEFAULT_AUDIO_FORMAT .env dosyası Config Basit
MUZIBU_DEFAULT_SOFT_MODE .env dosyası Config Basit

Uygulama Noktaları (Teknik)

Değişiklik yapılması gereken dosyalar ve ne değişeceği:

Backend (PHP/Laravel)

SongStreamController.php stream() metodu

Format kararını burada vermek yerine, yeni bir resolveAudioFormat($user) metodu çağrılacak. Bu metot 4 katmanlı hiyerarşiyi uygulayıp sonuç döndürecek.

User.php Model

Yeni alanlar fillable'a eklenecek. getEffectiveAudioFormat() ve getEffectiveSoftMode() metotları eklenecek — kurumsal hesap zincirini de kontrol eder.

MuzibuCorporateAccount.php Model

Yeni alanlar fillable'a eklenecek. Kurumsal panelde ayarlanabilir hale gelecek.

Frontend (JavaScript)

player-core.js loadAndPlaySong()

API yanıtından gelen stream_type zaten okunuyor — backend doğru formatı gönderdiğinde frontend değişikliğe gerek kalmaz. Soft Mode değişkenleri için config objesi eklenecek.

player-core.js Cihaz algılama

Yeni detectDeviceCapability() fonksiyonu: RAM, CPU, bağlantı tipi okuyup Soft Mode önerisi veya otomatik aktivasyon tetikleyecek.

app.blade.php Layout

Soft Mode aktifse performance-debug.js yüklenmeyecek. Blade directive ile kontrol: @unless($softMode) ... @endunless

API Response Değişikliği

// Mevcut API yanıtına eklenen yeni alanlar
{
"status": "ready",
"stream_type": "mp3", // Hiyerarşiye göre belirlendi
"soft_mode": true, // ← YENİ
"soft_config": { // ← YENİ
"crossfade": true,
"crossfade_duration": 3,
"disable_debug": true,
"disable_speed_test": true,
"disable_preload": true,
"spa_cache_limit": 10
},
"song": { ... }
}

Gerçek Hayat Senaryoları

Senaryo 1: Bireysel Kullanıcı, Eski Telefon

Ali, 2 GB RAM'li eski bir telefondan müzik dinliyor. Hiçbir ayar yapmamış.

Kullanıcı: auto → Kurumsal: yok → ENV: auto → Cihaz: RAM ≤ 2GB → Sonuç: Soft Mode OTOMATİK AÇ + MP3

Senaryo 2: Kafe Zinciri, Kurumsal Hesap

StarCafe 15 şubesiyle kurumsal hesap. Sahip "MP3" seçmiş. Şube çalışanı hiçbir şey yapmamış.

Kullanıcı: auto → Kurumsal: mp3 → Sonuç: MP3 (Kurumsal kararı geçerli)

Senaryo 3: Kurumsal Üye, Kişisel Tercih

Mehmet, StarCafe'nin IT yöneticisi. Kurum MP3 zorlamış ama Mehmet kendi profilinden "HLS" seçmiş.

Kullanıcı: hls → Sonuç: HLS (Kişisel tercih kurumsal kararı ezer)

Senaryo 4: Güçlü Cihaz, Varsayılan Ayar

Ayşe, 8 GB RAM iPhone 15'ten dinliyor. Hiçbir ayar yapmamış, kurumsal hesap yok.

Kullanıcı: auto → Kurumsal: yok → ENV: auto → Cihaz: güçlü → Sonuç: Normal Mod + HLS (mevcut davranış)

Senaryo 5: Platform Yöneticisi MP3 Zorlaması

Yönetici .env'de MUZIBU_DEFAULT_AUDIO_FORMAT=mp3 yapmış. Kullanıcı hiçbir şey seçmemiş.

Kullanıcı: auto → Kurumsal: yok → ENV: mp3 → Sonuç: MP3 (Platform varsayılanı geçerli)