Müzik çaların teknik altyapısı ve modüler yapısı
Sizin için 13 ayrı modülden oluşan, profesyonel düzeyde bir müzik çalar geliştirdik. Her modül bağımsız çalışır ve birbirleriyle mükemmel uyum içinde iletişim kurar.
Ana çalma motoru
Play/Pause/Seek
Sıra yönetimi
Beğeni sistemi
Ses kontrolü
Karıştırma modu
Tekrar modları
İlerleme çubuğu
Streaming motoru
Sağ tık menüsü
Kısayol tuşları
Dinleme geçmişi
İstatistik toplama
Albüm, playlist veya arama sonuçlarından bir şarkı seçilir.
HLS.js kütüphanesi şifreli ses dosyasını çözümlemeye başlar.
Queue, Controls, Progress modülleri bilgilendirilir ve UI güncellenir.
Kullanıcı kesintisiz müzik dinler, tüm kontroller aktif olur.
(Immediately Invoked Function Expression)
Kodun hemen çalışan, izole fonksiyonlar halinde yazılması.
Daire kapısı gibi: İçeri sadece izinli kişi girer
(HTTP Live Streaming JavaScript)
Web tarayıcılarında canlı ve kayıtlı video/ses akışı sağlayan kütüphane.
Netflix'in müzik versiyonu gibi
Kullanıcı bir şarkıya tıkladığında player mimarisinde şu işlemler gerçekleşir:
PlayerCore IIFE modülü şarkı bilgilerini alır ve HLS.js kütüphanesini başlatır. Audio element oluşturulur ve HLS manifest URL'si yüklenir. Tüm diğer modüller bu çekirdek üzerine kuruludur.
public/themes/muzibu/js/player/core.js - PlayerCore.init(songData)
HLS.js manifest dosyasını (.m3u8) indirir ve parçalara (segments) ayırır. İnternet hızına göre kalite seviyesi otomatik seçilir. Şifreli içerikler için key sunucusundan lisans alınır.
hls.loadSource(manifestUrl); hls.attachMedia(audioElement)
13 bağımsız modül (Controls, Queue, Favorites, Volume, Progress vb.) CustomEvent sistemi ile haberleşir. Bir modül "şarkı değişti" eventi fırlatır, diğerleri dinler ve kendini günceller.
document.dispatchEvent(new CustomEvent('player:songChanged', {detail: song}))
Çalma sırası Queue modülünde tutulur. Shuffle aktifse Fisher-Yates algoritması ile karıştırılır. Repeat modu (tek/liste/kapalı) sıradaki şarkı seçimini etkiler.
public/themes/muzibu/js/player/features/queue.js
Progress modülü ilerleme çubuğunu günceller. Analytics modülü dinleme süresini takip eder ve %30 dinleme eşiğinde sunucuya play kaydı gönderir.
if (playedPercent > 30) { fetch('/api/plays', {method: 'POST', body: songId}) }
Ses seviyesi, shuffle/repeat durumu localStorage'da saklanır. Sayfa yenilendiğinde bu ayarlar geri yüklenir. Kullanıcı her seferinde aynı ayarlarla devam eder.
localStorage.setItem('player_volume', volume); localStorage.setItem('player_shuffle', true)
13 Bağımsız Parça
Her parça bağımsız, birlikte mükemmel