22 Şubat Raporları / Durum Raporu

Player Durum Raporu

Ne yapıldı, ne yapılamadı, neler bekliyor — her şeyin özeti.

22 Şubat 2026 mztest.muzibu.com Faz 1

Genel Bakış

6
Grup Tamamlandı
A, B, C, D, F, G
1
Kritik Sorun
keyLoadError
1
Grup Bekliyor
E (Crossfade)
3
Ekstra Bekliyor
D7, D8, Badge
Faz 1 İlerleme ~%80

31 maddenin ~25'i tamamlandı. Kalan: keyLoadError fix + batch + crossfade + 3 ekstra madde.


Tamamlanan İşler

Kod yazıldı, test edildi, canlıda çalışıyor.

A. Şarkı Geçiş Fix

TAMAMLANDI
A1. Sıra boş kalmayacak: Tür → Popüler → Karışık → Baştan zinciri
A2. Geçiş kilidi: try/finally + 10sn güvenlik zamanlayıcısı
A3. Oturum düşünce: Token yenile → tekrar dene → sonraki şarkı
A4. Geçiş loglama sistemi
A5. Şarkı yarıda kesilme koruması
ABA testi BAŞARILI

B. Debug Mode

TAMAMLANDI
B1. ?debug + yetki koşullu yükleme (180 KB tasarruf)
B2. Debug paneli v4 — UI/UX düzenlemesi
B3. Yetki sistemi (sadece admin/developer görebilir)

G. Donma Önleme

TAMAMLANDI
G1. MP3 modunda HLS.js yüklenmeyecek
G2. Hız testi optimizasyonu
G3. Hata izolasyonu — bir parça çökse player devam eder
G4. Hızlı atlama bellek kontrolü
G5. Cihaz profillemesi ana işlemciyi bloklamaz

C. API Hızlandırma

TAMAMLANDI
C1. Premium + abonelik birleşik cache
C2. Son dinlenen / popüler / son çalınan cache
C3. Play kaydı: INSERT senkron, ağır işler arkaplanda
C4. HLS playlist dosya cache'i
C5. Endpoint bazlı rate limiting

F. Sonsuz Çalma

TAMAMLANDI
F1. Sıra doldurma zinciri: Tür → Popüler → Rastgele → Baştan
F2. Arka plan sekmesi koruması
F3. Oturum canlı tutma (periyodik ping)
F4. Bellek sızıntısı temizliği

D. Format & Soft Mode Altyapısı

D1-D6 TAMAMLANDI
D1. Migration: users → audio_preference (hls/mp3/auto)
D2. Settings: corporate_mp3_threshold = 50
D3. ENV: MUZIBU_DEFAULT_AUDIO_FORMAT=auto
D4. resolveAudioFormat($user) — Admin > Kurumsal > Sistem zinciri
D5. User model $fillable ve $casts'e audio_preference eklendi
D6. Admin panel kullanıcı bazlı format değiştirme (tenant 1001)
SongStreamController::resolveAudioFormat() Modules/Muzibu/config/config.php

HLS Sistemi — Yapılan İşler

HLS altyapısında büyük iyileştirmeler yapıldı. Birçok sorun çözüldü.

Çözülen Sorunlar

ÇÖZÜLDÜ IV=0 Hatası

ConvertToHLSJob.php'ye bin2hex(random_bytes(16)) eklendi. Rastgele IV ile şifreleme artık düzgün çalışıyor.

ÇÖZÜLDÜ Segment 403 Hatası

Storage URL rewrite kaldırıldı → relative path + /hls/ endpoint üzerinden sunuluyor. Dosya izinleri mztest:psacln yapıldı.

ÇÖZÜLDÜ Bitrate Hesaplama Hatası

HLSService.php'de EXTINF süresi kullanılıyor (önceki CHUNK_DURATION sabit değer hatası düzeltildi).

ÇÖZÜLDÜ Orijinal Kalite Filtresi Kaldırıldı

SongStreamController'daki high filtre kaldırıldı. Artık 4 kalite seviyesi mevcut.

ÇÖZÜLDÜ 66 Test Şarkısı Yeniden Encode

IV + 6sn segment + doğru master.m3u8 ile 66 şarkı yeniden dönüştürüldü. 5 aktif, 61 deaktif (batch bekliyor).

ÇÖZÜLDÜ Adaptive Bitrate Altyapısı

4 kalite seviyesi: ultralow (32kbps/4sn), low (64kbps/4sn), mid (128kbps/4sn), high (orijinal/6sn). Master.m3u8 doğru oluşturuluyor.

ÇÖZÜLDÜ Key URI Birleştirme

Tüm variant'lar aynı key URI kullanıyor (&level= parametresi kaldırıldı). HLS.js keyUriToKeyInfo cache'i tek key ile çalışıyor.

ÇÖZÜLDÜ MP3 128k Altyapısı

HLSService::generateMp3128() + ConvertToHLSJob'a entegre + hls:add-variants --mp3-128 komutu.

ÇÖZÜLDÜ CDN Audio URL

SignedUrlService::generateAudioCdnUrl() — Cloudflare cache dostu path-based signed URL: /audio/songs/{id}/{expires}/{sig}

Değiştirilen Dosyalar

M Modules/Muzibu/App/Http/Controllers/Api/SongStreamController.php
M Modules/Muzibu/App/Jobs/ConvertToHLSJob.php
M app/Services/Muzibu/HLSService.php
M app/Services/SignedUrlService.php
M Modules/Muzibu/config/config.php
M Modules/Muzibu/App/Console/Commands/AddHlsVariantsCommand.php
M public/themes/muzibu/js/player/core/player-core.js
M public/opcache-reset.php

Kritik Sorun: keyLoadError (ÇÖZÜLEMEDI)

HLS şarkı çalarken "decryptdata unset or changed" hatası. Şarkılar MP3 fallback ile çalıyor ama HLS modunda çalışmıyor.

Ne Oluyor? (Basit)

Şarkıyı çalmak için önce şifresini çözmesi gerekiyor. Anahtar (key) başarıyla indiriliyor. Ama indirme süresi boyunca (300-600ms) başka bir işlem şifre bilgilerini sıfırlıyor. Anahtar döndüğünde "eşleşmiyor" diyor ve çöküyor. Sonuç olarak sistem MP3'e geçiyor ve şarkı çalıyor — ama HLS'in avantajları (kalite geçişi, daha az data) kullanılamıyor.

Bulunan Kök Nedenler (3 Katmanlı)

1. ANA NEDEN Alpine Proxy Setter Kaskadı

self.hls Alpine store'da tutuluyor. self.hls.currentLevel = 3 ataması Alpine'ın reaktif proxy'sinden geçiyor. Bu, HLS.js'nin iç setter'larını da proxy'e sokuyor → 4x zincirleme kaskad.

set @ hls.min.js → Alpine proxy → set @ hls.min.js → Alpine proxy → set @ hls.min.js → Alpine proxy → set @ hls.min.js → player-core.js:5196
2. SONUÇ Çift loadFragment Çağrısı

Kaskad nedeniyle HLS.js aynı fragment için iki eşzamanlı yükleme başlatıyor. İkinci çağrı decryptdata'yı sıfırlıyor → key XHR dönünce null buluyor → FATAL hata.

3. EKSİK FIX CachingKeyLoader Yarım Kalmış

Cache'den senkron key serve etme kodu tasarlandı ama hiç yazılmadı. prefetch-warm=true logu çıkıyor ama yine XHR yapıyor. Cache var, kullanılmıyor.

Denenen Ama İşe Yaramayan Çözümler

Denenen Neden İşe Yaramadı
autoLevelCapping = 3 Sadece üst limit, ABR hala level düşürebiliyor
currentLevel = 3 (MANIFEST_PARSED) Sorunun kaynağı — Alpine kaskadı tetikliyor
autoStartLoad: false Faydalı ama tek başına yetersiz
CachingKeyLoader (memory cache) Cache-serve kodu yazılmadı, hep XHR yapıyor
Promise.resolve().then() cache serve Microtask bile race condition'ı önleyemedi
loadSource() recovery Aynı kodu çalıştırıyor → aynı hata
Key URI birleştirme (level parametresi kaldırma) Doğru yönde ama Alpine kaskadı devam ediyor

Önerilen Çözüm Yaklaşımları (Henüz Uygulanmadı)

ÖNCELİK 1 self.hls'i Alpine store'dan çıkar

HLS.js instance'ını ham JavaScript değişkeninde tut. Alpine proxy geçmesin → kaskad oluşmasın.

ÖNCELİK 2 MANIFEST_PARSED'dan currentLevel atamasını kaldır

startLevel: 3 config'i zaten var. MANIFEST_PARSED'daki atama gereksiz ve sorun kaynağı.

ÖNCELİK 3 CachingKeyLoader'a cache-serve dalını ekle

Prefetch edilen key'i senkron olarak serve et. XHR yok → async delay yok → race condition yok.

ALTERNATİF HLS.js versiyon yükseltme (v1.5.x)

key-loader.ts refactor edilmiş olabilir. Changelog incelenip karar verilecek.


Bekleyen İşler

keyLoadError'a bağlı veya bağımsız bekleyen maddeler.

keyLoadError Çözülmeden Yapılamaz

BLOKE 61 Şarkı Batch Re-encode

Mid variant + MP3 128k eklenmesi gerekiyor. Komut hazır: hls:add-variants --quality=all --mp3-128. Şu an is_active=0 ile deaktif.

BLOKE 61 Şarkı Reactivate

Batch bittikten sonra UPDATE muzibu_songs SET is_active=1 çalıştırılacak.

BLOKE E. Crossfade Açılması

Kod tamamen hazır. HLS keyLoadError çözülmeden açılamaz — iki HLS instance çakışması riski.

E1. Backend'den crossfade config gönder (HLS: 5sn, MP3: 3sn)
E2. crossfadeEnabled: true — otomatik açık
E3. Zayıf cihazda süreyi otomatik kısalt
BLOKE Production ~30K Şarkı Re-encode

muzibu.com'daki tüm şarkıların yeni format + variant ile yeniden dönüştürülmesi. Test ortamında sorun çözülmeden production'a geçilemez.

Bağımsız Bekleyen Maddeler

D7 Soft Mode MP3 (128kbps)

MP3 modundaki kullanıcılar için 128kbps düşük kalite MP3 sunulacak. generateMp3128() metodu hazır, batch sırasında üretilecek.

D8 Soft Player Admin Seçimi

Admin panelden kullanıcıya soft_player modu atanabilsin. Migration gerekli — users tablosuna soft_player alanı (3 aşamalı onay).

UI Yavaş Bağlantı Badge

Player bar üstünde, ortada, WiFi ikonu animasyonlu badge. Yavaş bağlantı algılandığında görünecek.


Mevcut Sistem Durumu

Çalışan

  • MP3 fallback — tüm şarkılar MP3 olarak çalıyor
  • Şarkı geçişleri — sorunsuz çalışıyor
  • Sıra doldurma — hiç boş kalmıyor
  • Debug paneli — ?debug ile açılıyor
  • Format seçimi — Admin > Kurumsal > Sistem zinciri
  • HLS segment servisi — /hls/ endpoint çalışıyor
  • Key servisi — /hls-key/ endpoint imza doğrulaması
  • 4 kalite seviyesi master.m3u8'de mevcut

Çalışmayan

  • HLS playback — keyLoadError FATAL hatası
  • Adaptive bitrate — HLS çalışmadığı için test edilemez
  • Crossfade — HLS'e bağlı, kapalı
  • 61 şarkı deaktif (is_active=0) — batch bekliyor

Veritabanı Durumu (tenant_muzibu_1528d0)

66
Toplam Şarkı (test)
5
Aktif (is_active=1)
34455-34459
61
Deaktif (is_active=0)
Batch bekliyor

İlgili Raporlar & Dokümanlar

Özet Tablo

Grup Konu Madde Durum
AŞarkı Geçiş Fix5TAMAMLANDI
BDebug Mode3TAMAMLANDI
CAPI Hızlandırma5TAMAMLANDI
DFormat & Soft Mode6+2D1-D6 OK / D7-D8 BEKLİYOR
ECrossfade3BLOKE (keyLoadError)
FSonsuz Çalma4TAMAMLANDI
GDonma Önleme5TAMAMLANDI
HLSkeyLoadError Fix1ÇÖZÜLEMEDI
BATCH61 Şarkı Re-encode + Activate2BLOKE
UIYavaş Bağlantı Badge1BAŞLANMADI