Sorunlar, Denemeler ve Geçiş Planı
23 Mart 2026 • v1
Ne oldu? Bunny CDN'den müzik çalarken Safari iOS'ta 401 (yetkisiz) hatası aldık.
Neden? Safari'nin yerleşik HLS oynatıcısı, farklı sunuculara istek atarken kimlik bilgilerini göndermiyor.
Şu an? Bunny kapalı, tüm müzikler kendi sunucumuzdan çalıyor. Sorun yok.
İleride? Tüm MP3'ler Bunny'ye yüklenince, Safari için MP3 fallback ile hybrid moda geçeceğiz.
┌─────────────────────────────────────────────────────────────┐ │ HLS Akışı (Hybrid Mode) │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 1. master.m3u8 ──────► Bunny CDN (public) │ │ 2. playlist.m3u8 ─────► Bunny CDN (public) │ │ 3. segment-XXX.ts ────► Bunny CDN (AES-128 encrypted) │ │ 4. enc.key ──────────► www.muzibu.com (auth required!) │ │ │ │ Sorun: Safari iOS #4'ü çağırırken cookie göndermiyor │ │ → 401 Unauthorized → Şarkı çalmıyor │ │ │ └─────────────────────────────────────────────────────────────┘
Hls.isSupported() = false → Safari iOS'ta HLS.js çalışmıyormuzibu-audio-cdn.b-cdn.net (Bunny)www.muzibu.com/hls-key/ (Bizim sunucu)
[Error] Failed to load resource: 401 Unauthorized
https://www.muzibu.com/hls-key/muzibu/songs/23390?...
[Log] cdn-cache: BYPASS
[Log] cdn-requestpullcode: 401
[Log] server: BunnyCDN
MuzibuServiceProvider.php'ye session middleware eklendi
❌ Başarısız - Safari cross-origin'de cookie göndermiyor, session işe yaramaz
Playlist'leri fetch et → Key'i data:base64 olarak göm → Blob URL oluştur
// Key'i data URI olarak göm
URI="data:application/octet-stream;base64,{KEY_BASE64}"
// Playlist için blob URL oluştur
var blob = new Blob([modifiedPlaylist], {type: 'application/vnd.apple.mpegurl'});
var blobUrl = URL.createObjectURL(blob);
❌ Başarısız - Safari native HLS blob:// URL desteklemiyor
Hata: "NotSupportedError: The operation is not supported"
Safari iOS tespit et → API'ye ?force_mp3=1 ekle → MP3 URL dön
// Frontend
var isSafariIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) &&
/Safari/.test(navigator.userAgent);
if (isSafariIOS) url += '?force_mp3=1';
// Backend
if ($request->has('force_mp3')) {
return MP3_URL; // HLS yerine MP3
}
⏸️ Test Edilmedi - Muhtemelen çalışır, Bunny'de MP3 yüklenince denenecek
Şifreleme anahtarını da Bunny'ye yükle
❌ Reddedildi - Güvenlik riski, anahtarlar public olmamalı
Key URI'lerini değiştirip playlist'leri yeniden oluştur
❌ Reddedildi - 40K+ şarkı var, çok uzun sürer
BUNNY_STORAGE_ENABLED=true BUNNY_STORAGE_MODE=local ← Şu an local BUNNY_FALLBACK_TO_LOCAL=true
MP3 Yükleme Tamamla
Bunny migration script ile tüm MP3'leri yükle
php artisan bunny:migrate --type=mp3
Safari iOS MP3 Fallback Ekle
player-core.js'e Safari iOS tespiti + force_mp3 ekle
// Safari iOS → API'ye ?force_mp3=1 // Backend → HLS yerine MP3 URL dön
Test (Local Mode'da)
Safari iOS'ta MP3 fallback'i test et
Hybrid Moda Geç
# .env BUNNY_STORAGE_MODE=hybrid # Cache temizle php artisan config:cache
Canlı Test
Tüm cihazlarda test et: Chrome, Safari macOS, Safari iOS, Android
| Cihaz/Tarayıcı | Format | Kaynak |
|---|---|---|
| Chrome / Firefox / Edge | HLS (HLS.js) | Bunny CDN |
| Safari macOS | HLS (Native) | Bunny CDN + Local Key |
| Safari iOS | MP3 (Fallback) | Bunny CDN |
| Android Chrome | HLS (HLS.js) | Bunny CDN |
eb0acb8ff 23 Mar 05:XX 🔙 Safari iOS denemelerini geri al + Bunny local moda 83d1043bd 23 Mar 05:XX 🍎 Safari iOS HLS Denemeleri (HATALI) f2ef4bcbd 22 Mar 22:56 🐰 Bunny Hybrid Serving + Redis Tracking b489ec4fa 22 Mar 22:41 🐰 Bunny Migration optimizasyonları 55ff250f8 21 Mar 00:27 🐰 Bunny Storage Zone entegrasyonu
Geri almak için:
git checkout f2ef4bcbd -- [dosyalar]