Soft Player Sistemi

Muzibu — Cihaz Tespiti, Format Seçimi ve Karar Zinciri

Basit Anlatim (Herkes Icin)

Muzibu'da muzik dinlerken iki farkli yontem var:

HLS (Akilli Yayim)

Muzigi parcalar halinde indirir. Internet hizina gore kaliteyi otomatik ayarlar. Guclu telefonlarda mukemmel calisir ama eski/yavas cihazlarda fazla guc harcar.

MP3 (Basit Calma)

Tek bir dosya olarak calar. Hic ekstra islem yok. Eski telefonlarda bile sorunsuz calisir, pil tuketimi dusuk.

Soft Player Ne Yapar?

Kullanicinin cihazi zayifsa (eski telefon, az RAM, yavas internet) sistem bunu otomatik tespit eder ve en uygun formati secer. Kullanici hicbir sey yapmaz — sadece play'e basar, gerisi otomatik.

Ayrica admin panelden de belirli kullanicilara manuel olarak soft player atanabilir.

Buyuk Resim: Kim Ne Karar Veriyor?

Sistem 3 katmandan olusuyor. Her katman birbirinden bagimsiz calisir ama birlikte karar verir.

Katman 1: Backend

resolveAudioFormat()
0 Admin soft_player = true? → MP3
1 audio_preference = hls/mp3? → Secim
2 Kurumsal 50+ kisi? → MP3
3 ENV default → auto
HAZIR

Katman 2: API

/api/muzibu/songs/{id}/stream
// Backend kararina gore:
// Format = HLS ise:
stream_url: "HLS master.m3u8"
fallback_url: "MP3 dosyasi"
stream_type: "hls"
// Format = MP3 ise:
stream_url: "MP3 dosyasi"
stream_type: "mp3"
HAZIR

Katman 3: Frontend

player-core.js
CPU cekirdek sayisi ≤2 = zayif
RAM miktari ≤2GB = zayif
Baglanti tipi 2g/3g = zayif
Bant genisligi <1.5Mbps = zayif
YAPILACAK

Tam Akis: Kullanici Play'e Basinca Ne Oluyor?

1
Kullanici Play'e basiyor
Frontend → GET /api/muzibu/songs/{id}/stream
2
Backend: resolveAudioFormat($user)
Oncelik zinciri calisir (soft_player → audio_preference → kurumsal → ENV)
Backend = HLS
stream_url: HLS playlist
fallback_url: MP3 dosyasi
stream_type: "hls"
Backend = MP3
stream_url: MP3 dosyasi
fallback_url: MP3 dosyasi
stream_type: "mp3"
3
Frontend: Cihaz Tespiti Karari YAPILACAK
Backend "HLS" dediyse bile, cihaz zayifsa frontend fallback_url (MP3) kullanir
HLS ile Cal
Guclu cihaz + Backend HLS dedi
Adaptive bitrate, sifreleme, kalite gecisi
MP3 ile Cal
Zayif cihaz VEYA Backend MP3 dedi
Tek istek, native playback, dusuk kaynak

Tum Senaryolar

Admin Ayari Cihaz Backend Karari Frontend Karari Sonuc
auto + soft OFF Guclu HLS stream_url (HLS) HLS Full
auto + soft OFF Zayif HLS fallback_url (MP3) MP3
mp3 + soft OFF Guclu MP3 stream_url (MP3) MP3
herhangi + soft ON Guclu MP3 (zorla) stream_url (MP3) MP3 (Admin)
herhangi + soft ON Zayif MP3 (zorla) stream_url (MP3) MP3 (Admin)
hls + soft OFF Guclu HLS stream_url (HLS) HLS Full
hls + soft OFF Zayif HLS fallback_url (MP3) MP3 (Cihaz)
kurumsal 50+ Guclu MP3 stream_url (MP3) MP3 (Kurumsal)
Onemli: Admin'in soft_player zorlamamasi (0. oncelik) her seyi override eder. Cihaz tespiti ise sadece backend "HLS" dediginde devreye girer — backend zaten MP3 diyorsa frontend'in yapacagi bir sey yok.

Oncelik Zinciri (En yuksekten en dusuge)

0
Admin soft_player = ON
Her seyi override eder → MP3
Backend
1
Admin audio_preference (hls/mp3)
Acik secim yapildiysa onu kullan
Backend
2
Kurumsal hesap (50+ kisi)
Cok kullanicili kurumlar → MP3
Backend
3
ENV / Config default
MUZIBU_DEFAULT_AUDIO_FORMAT = auto
Backend
4
Cihaz tespiti (frontend)
Zayif cihaz → fallback_url (MP3) kullan
Frontend

Teknik Detaylar (Gelistiriciler Icin)

Hazir Olan (Backend)

// Dosyalar:
SongStreamController.php
→ resolveAudioFormat($user)
→ stream() metodu format kararina gore URL doner
User.php
→ $fillable: audio_preference, soft_player
→ $casts: audio_preference=string, soft_player=boolean
UserManageComponent.php
→ Admin UI: soft_player toggle + format dropdown
config/config.php
→ muzibu.audio.default_format
→ muzibu.audio.corporate_mp3_threshold
.env
→ MUZIBU_DEFAULT_AUDIO_FORMAT=auto
→ MUZIBU_CORPORATE_MP3_THRESHOLD=50

Yapilacak Olan (Frontend)

// Dosya:
player-core.js
// 1. Cihaz tespiti fonksiyonu
detectDeviceCapability() {
cpu = navigator.hardwareConcurrency
ram = navigator.deviceMemory
net = navigator.connection?.effectiveType
bw = navigator.connection?.downlink
isSoft = (cpu≤2 && ram≤2) || net==='2g'
localStorage.set('mzb_soft_device', isSoft)
}
// 2. URL secimi (playSong icinde)
if (stream_type === 'hls' && isSoftDevice) {
// HLS yerine fallback MP3 kullan
url = fallback_url;
type = 'mp3';
}

Gelecek Isler

D7: 128kbps MP3 uretimi (FFmpeg job)
E: Crossfade (HLS fix tamamlandi)
22 Subat 2026 • Muzibu.com.tr