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ış
Kullanıcı şarkıyı çalar
Frontend → API isteği gönderir
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_mp3parametresi 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.
Kullanıcı Tercihi
EN YÜKSEK ÖNCELİKKullanıcı kendi profilinden veya player ayarlarından HLS, MP3 veya Otomatik seçebilir.
Ö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.
Kurumsal Hesap Ayarı
KURUM ZORLAYABİLİRKurumsal hesap sahibi, tüm üyeleri için format belirleyebilir. Örneğin bir kafe/restoran zinciri tüm şubelerini MP3'e zorlayabilir.
Kurumsal panel → Ayarlar → Çalma Formatı → "MP3" seçerse tüm üyeler MP3 çalar
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.
Platform Varsayılanı (ENV)
YÖNETİCİ AYARI
Platform yöneticisi .env dosyasından tüm sistem için varsayılan format belirler.
Sistem Otomatiği (Şu Anki Davranış)
FALLBACKHiç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.
Sadece Otomatik
Sistem cihazı analiz eder, yavaşsa Soft Mode açar.
Hibrit (Önerilen)
Sistem önerir + kullanıcı onaylar/değiştirir.
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)
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 üzerinde ayarlar ikonu → "Hafif Mod" switch'i. Anında geçiş, sayfa yenileme gerekmez.
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
2. Kurumsal Hesaplar Tablosu — Yeni Kolonlar
Kurum sahibi bu değerleri kurumsal panelden ayarlar. Tüm üyeler (şubeler dahil) etkilenir.
3. ENV Konfigürasyonu
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)
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.
Yeni alanlar fillable'a eklenecek. getEffectiveAudioFormat() ve
getEffectiveSoftMode() metotları eklenecek — kurumsal hesap zincirini de kontrol eder.
Yeni alanlar fillable'a eklenecek. Kurumsal panelde ayarlanabilir hale gelecek.
Frontend (JavaScript)
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.
Yeni detectDeviceCapability() fonksiyonu: RAM, CPU, bağlantı tipi okuyup
Soft Mode önerisi veya otomatik aktivasyon tetikleyecek.
Soft Mode aktifse performance-debug.js yüklenmeyecek.
Blade directive ile kontrol: @unless($softMode) ... @endunless
API Response Değişikliği
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ış.
Senaryo 2: Kafe Zinciri, Kurumsal Hesap
StarCafe 15 şubesiyle kurumsal hesap. Sahip "MP3" seçmiş. Şube çalışanı hiçbir şey yapmamış.
Senaryo 3: Kurumsal Üye, Kişisel Tercih
Mehmet, StarCafe'nin IT yöneticisi. Kurum MP3 zorlamış ama Mehmet kendi profilinden "HLS" seçmiş.
Senaryo 4: Güçlü Cihaz, Varsayılan Ayar
Ayşe, 8 GB RAM iPhone 15'ten dinliyor. Hiçbir ayar yapmamış, kurumsal hesap yok.
Senaryo 5: Platform Yöneticisi MP3 Zorlaması
Yönetici .env'de MUZIBU_DEFAULT_AUDIO_FORMAT=mp3 yapmış. Kullanıcı hiçbir şey seçmemiş.