22 Şubat 2026 • Muzibu.com.tr
Müzik dinlerken şarkılar en düşük kalitede çalıyordu. İnternet hızınız ne kadar iyi olursa olsun, herkes 64kbps'lik (telefon kalitesinin bile altında) ses duyuyordu. Orijinal kalite hiç çalmıyordu.
Şarkıları korumak için kullandığımız şifreleme sisteminde bir hata vardı. Orijinal kaliteli dosyaların "şifre kombinasyonu" (IV değeri) sıfır olarak yazılmıştı. Bu yüzden orijinal kalite çözülemiyordu ve devre dışı bırakılmıştı.
Dosya: Modules/Muzibu/App/Jobs/ConvertToHLSJob.php:95-98
// ESKİ KOD (HATALI):
$keyInfoContent = $keyUri . "\n" . $keyPath . "\n";
// 3. satır (IV) yazılmamış! FFmpeg IV=0x0000...0000 kullanıyor
// YENİ KOD (DÜZELTİLMİŞ):
$iv = bin2hex(random_bytes(16));
$keyInfoContent = $keyUri . "\n" . $keyPath . "\n" . $iv;
// Artık her şarkı benzersiz IV alıyor
AES-128 şifrelemede IV (Initialization Vector) her şarkı için benzersiz olmalı. Sıfır IV kullanmak hem güvenlik açığı hem de HLS.js'te "decryptdata unset or changed" hatasına neden oluyor.
Dosya: app/Services/Muzibu/HLSService.php:509
// ESKİ KOD (HATALI):
$highBitrate = round($totalSize / ($segCount * self::CHUNK_DURATION) * 8);
// CHUNK_DURATION=4sn ama orijinal segmentler 10sn → 2.5x şişik hesap
// Sonuç: 268kbps yerine 669kbps yazıyordu
// YENİ KOD (DÜZELTİLMİŞ):
// Playlist'ten gerçek #EXTINF sürelerini topla
preg_match_all('/#EXTINF:([\d.]+),/', $playlistContent, $matches);
$highBitrate = round($totalSize * 8 / $totalDuration);
// Artık gerçek süre kullanılıyor
| Şarkı | Orijinal MP3 | Eski master.m3u8 | Yeni master.m3u8 |
|---|---|---|---|
| 34455 | 180 kbps | 669 kbps | 213 kbps |
| 34456 | 195 kbps | ~670 kbps | 280 kbps |
| 34501 | ~250 kbps | ~670 kbps | 285 kbps |
Dosya: Modules/Muzibu/App/Http/Controllers/Api/SongStreamController.php:746-755
// ESKİ KOD: Orijinal kaliteyi master.m3u8'den siliyordu
$content = preg_replace(
'/^#EXT-X-STREAM-INF:[^\n]*\nplaylist\.m3u8\n?/m',
'', $content // HIGH SİLİNİYORDU!
);
// YENİ KOD: Orijinal dahil tüm kaliteler sunuluyor
// + High playlist'e de query parametreleri ekleniyor
// + High segmentleri de storage URL'sine yönlendiriliyor
// + High key URI'sine &level=high ekleniyor (race condition önlemi)
Dosya: Modules/Muzibu/App/Jobs/ConvertToHLSJob.php:137
| Kalite | Eski Segment | Yeni Segment |
|---|---|---|
| Ultralow (32kbps) | 4 sn | 4 sn |
| Low (64kbps) | 4 sn | 4 sn |
| Orijinal (~180-280kbps) | 10 sn | 6 sn |
Sadece orijinal (high) kalite yeniden encode edildi. Ultralow ve low'a dokunulmadı. Her şarkıya benzersiz IV atandı, segment süresi 6 saniyeye düşürüldü.
| Dosya | Değişiklik |
|---|---|
Modules/Muzibu/App/Jobs/ConvertToHLSJob.php |
IV eklendi + segment 10sn → 6sn |
app/Services/Muzibu/HLSService.php |
Bitrate hesabı: CHUNK_DURATION yerine gerçek EXTINF süresi |
Modules/Muzibu/.../SongStreamController.php |
High filtre kaldırıldı + query param + segment URL + level=high |
storage/.../hls/*/playlist.m3u8 |
66 şarkı yeniden encode (IV + 6sn segment + master.m3u8) |