vs Muzibu

Web Player karşılaştırması - Aynı tarayıcı, farklı mimari

v2 - Web Odaklı 3/4 Tamamlandı
v2 Güncellemesi (18 Şubat 2026): Bu rapor v1'deki native app karşılaştırmasını web player odaklı olarak günceller. Spotify Web Player ve YouTube Music Web de tarayıcıda çalışır - adil karşılaştırma budur. Ayrıca yapılan optimizasyonlar işaretlenmiş, güncel değerler yansıtılmıştır.

Optimizasyon Durumu

Buffer Size
200MB → 30MB
Back Buffer
30sn → 5sn
Agresif Cleanup
Madde 6 tamamlandı
HLS Reuse
Madde 5 bekliyor

Özet: Web Player'lar Arasındaki Fark Nedir?

Basit Anlatım

Spotify Web ve YouTube Music Web de tıpkı Muzibu gibi tarayıcıda çalışıyor. Yani aynı kısıtlamalara tabi: aynı bellek limiti, aynı JavaScript motoru, aynı tarayıcı kuralları.

Fark mimaride: Onlar tek bir çalar kullanıp şarkı değişince sadece kaynağı değiştirirken, Muzibu her şarkıda yeni çalar oluşturup eskisini çöpe atıyor.

Benzetme: Spotify her şarkıda kaseti değiştiriyor. Muzibu ise her şarkıda teybi çöpe atıp yenisini alıyor.

Teknik Özet

Platform Hepsi web tarayıcı = Eşit şartlar
DRM/Şifreleme Widevine/EME vs HLS AES-128
Streaming DASH/MSE vs HLS.js/MSE
Buffer Stratejisi Artık benzer (20sn/30MB)
Instance Yönetimi Tek reuse vs Çoklu instance

Web Player Mimarisi Karşılaştırması

Spotify Web

open.spotify.com
  • Widevine EME - Tarayıcı DRM (donanım hızlandırmalı)
  • DASH + MSE - Media Source Extensions ile akış
  • Tek player instance - Hiç destroy/recreate yok
  • ~30sn forward buffer - Minimal bellek kullanımı
  • Ogg Vorbis 256kbps - Verimli codec
Web'de bile donma yok

YouTube Music Web

music.youtube.com
  • Widevine EME - Aynı DRM altyapısı
  • DASH + MSE - Adaptive bitrate streaming
  • Tek player instance - Video/audio element reuse
  • ~20-30sn adaptive buffer - Ağa göre ayarlanır
  • AAC/Opus codec - Çok verimli sıkıştırma
Web'de bile donma yok

Muzibu

muzibu.com
  • HLS + AES-128 - Yazılım tabanlı şifreleme
  • HLS.js + MSE - Aynı MSE altyapısı
  • Çoklu HLS instance - Her şarkıda new/destroy
  • 20sn forward, 5sn back - Spotify seviyesi
  • AAC 128kbps (HLS) - Standart kalite
Buffer OK, instance sorunu kaldı

DRM/Şifreleme Farkı (Web Player'lar)

Basit Anlatım

Spotify/YouTube: Tarayıcının kendi kilit sistemi (Widevine). Müzik şifreleme/çözme işi tarayıcının derinlerinde, hatta bazı cihazlarda donanımda yapılıyor. JavaScript'e hiç dokunmuyor.

Muzibu: Kendi kilit sistemi (AES-128). Her parçayı JavaScript ile çözüyor. Bu CPU'da ekstra iş demek, ama güvenlik açısından yeterli ve bağımsız çalışıyor.

Benzetme: Spotify kapıyı parmak iziyle açıyor (donanım). Muzibu ise her seferinde anahtarla açıyor (yazılım). İkisi de güvenli, biri daha hızlı.

Teknik Detay

Spotify/YouTube (Widevine EME)
navigator.requestMediaKeySystemAccess('com.widevine.alpha')

Tarayıcı CDM modülü ile decrypt. JS thread'i meşgul etmez.

Muzibu (HLS AES-128)
HLS.js → fetch(key) → crypto.subtle.decrypt(segment)

Her segment için JS'de AES decrypt. CPU kullanır ama SubtleCrypto ile optimize.

Not: Web Crypto API (SubtleCrypto) kullanıldığında AES decrypt oldukça hızlı. Asıl performans farkı DRM'de değil, instance yönetiminde.

Bellek Yönetimi Karşılaştırması (Web Player)

Özellik Spotify Web YouTube Web Muzibu (Güncel)
Memory Limit Browser heap (~2GB) Browser heap (~2GB) Browser heap (~2GB)
Garbage Collection Browser V8 GC Browser V8 GC Browser V8 GC
Buffer Stratejisi ~30sn forward, 0 back 20-30sn adaptive 20sn forward, 5sn back
Max Buffer Size ~30-50MB ~50MB 30MB
Instance Yönetimi Tek player, reuse Tek player, reuse Çoklu HLS instance
Şarkı Değişiminde Source swap Source swap Cleanup aktif

Buffer Optimizasyonu Tamamlandı

Buffer ayarları artık Spotify/YouTube seviyesinde: maxBufferSize: 30MB, backBufferLength: 5sn, maxBufferLength: 20sn.
Kalan tek fark: HLS instance yönetimi (Madde 5).

HLS.js Ayarları: Eski → Güncel → Hedef

Eski Ayarlar (v1)

new Hls({
  maxBufferLength: 30,
  maxMaxBufferLength: 60,
  maxBufferSize: 200MB,
  backBufferLength: 30,
});
~150-250MB

Güncel Ayarlar (Şu An)

new Hls({
  maxBufferLength: 20,
  maxMaxBufferLength: 30,
  maxBufferSize: 30MB,
  backBufferLength: 5,
  enableWorker: false,
});
// Preload: 1sn buffer
// + Madde 6 cleanup
~30-50MB

Hedef (Madde 5 Sonrası)

// Başlangıçta 2 tane oluştur
hlsA = new Hls({...});
hlsB = new Hls({...});

// Şarkı değişince:
hlsA.stopLoad();
hlsA.detachMedia();
hlsA.loadSource(newUrl);
hlsA.attachMedia(audio);
// destroy yok!
~25-40MB (sabit)

Audio Pipeline Karşılaştırması (Web)

Spotify Web Player Pipeline

CDN Widevine CDM Decrypt MSE SourceBuffer Audio Element

DRM decrypt tarayıcı CDM'de, JS thread meşgul olmaz

YouTube Music Web Pipeline

Google CDN Widevine CDM Decrypt MSE SourceBuffer Video/Audio Element

Aynı Widevine altyapısı, video + audio birlikte

Muzibu Web Pipeline

Cloudflare CDN HLS.js Manifest Parse AES-128 Decrypt (SubtleCrypto) MSE SourceBuffer Audio Element

HLS.js manifest parse + AES decrypt (SubtleCrypto ile hızlı). Asıl fark: her şarkıda yeni instance

Adil Karşılaştırma

Web player'da Spotify/YouTube ile Muzibu arasındaki pipeline farkı native app'teki kadar büyük değil. Hepsi aynı tarayıcıda, aynı MSE API'sini kullanıyor. Widevine decrypt biraz daha hızlı ama asıl performans farkını yaratan instance yönetimi: onlar tek player reuse ederken, Muzibu her şarkıda yeni HLS instance oluşturuyor.

Çözüm Önerileri: Yapılanlar ve Kalanlar

Tamamlanan Optimizasyonlar

  • Buffer Size: 200MB → 30MB

    Spotify seviyesine indirildi

  • Back Buffer: 30sn → 5sn

    Geri sarma nadiren kullanılır

  • Agresif Cleanup (Madde 6)

    Şarkı değişiminde eski audio DOM'dan kaldırılıyor

  • Preload Buffer Optimize

    Preload: 1sn buffer / 5MB (sadece ilk segment)

Kalan: Madde 5 - HLS Instance Reuse

Sorun

Her şarkıda new Hls() + hls.destroy() yapılıyor. Bu:

  • • Bellek ayırma/serbest bırakma overhead'i
  • • Event listener sızıntı riski
  • • GC baskısı (her destroy = çöp toplama tetikler)
  • • SourceBuffer oluşturma/silme maliyeti
Hedef

2 adet HLS instance (A ve B) başlangıçta oluştur, sonsuza kadar reuse et:

  • • A çalarken B preload eder
  • • Geçişte swap: B çalar, A preload eder
  • • Asla destroy/new yok
  • • Spotify/YouTube web ile aynı yaklaşım
Etki

Sabit bellek kullanımı, GC baskısı sıfır, geçişler anlık.

Uzun Vadeli Çözümler (Gelecek)

1 PWA + Service Worker

Offline playback, daha iyi caching, arka plan oynatma. Spotify Web de PWA desteği sunuyor.

2 WebCodecs API

Yeni tarayıcı API'si, hardware decode imkanı. Chrome 94+ destekli, Safari henüz kısıtlı.

3 MP3 Fallback (Düşük Cihazlar)

Düşük RAM'li mobillerde HLS yerine direkt MP3 stream. HLS.js overhead'i sıfırlanır.

4 Native App (React Native/Flutter)

Gerçek çözüm ama büyük yatırım. Uzun vadede değerlendirilebilir.

Mevcut ve Beklenen İyileşme

Zaten Sağlanan

%85
Buffer Memory
200MB → 30MB
%83
Back Buffer
30sn → 5sn
0
Stale Audio
Madde 6 cleanup
Max 2
Audio Elements
Test ile doğrulandı

Madde 5 Sonrası Beklenen

%30-40
CPU Azalması
new/destroy yok
~0
GC Baskısı
Sabit instance
<50ms
Geçiş Süresi
Anlık swap
Sabit
Bellek Profili
Artık dalgalanmaz

Web player karşılaştırmasında: Buffer ayarları zaten Spotify/YouTube seviyesinde. Madde 5 (HLS reuse) tamamlandığında, Muzibu web player'ı Spotify Web Player ile neredeyse aynı performans profiline sahip olacak. Kalan tek fark DRM yaklaşımı (Widevine vs AES-128) olacak ki bu küçük bir fark.

Kaynaklar

Versiyon Geçmişi

v1 (18 Şubat 2026): İlk rapor - Native app karşılaştırması, eski buffer değerleri

v2 (18 Şubat 2026): Web player odaklı güncelleme, yapılan optimizasyonlar işaretlendi, güncel değerler yansıtıldı