Bunny Hybrid Storage v2

İmplementasyon Planı

Tüm cihazlarda Bunny CDN ile hızlı, cache'li, korumalı müzik çalma

Hedef

🚀
Hızlı
Bunny CDN cache
🔐
Korumalı
Token + Süre limiti
📱
Her Cihaz
iOS, Android, PC

Format Seçimi (ENV'den)

# .env dosyasından kontrol edilir

MUZIBU_DEFAULT_AUDIO_FORMAT=hls_auto   # Varsayılan HLS
MUZIBU_DEFAULT_AUDIO_FORMAT=mp3_auto   # Varsayılan MP3
MUZIBU_DEFAULT_AUDIO_FORMAT=mp3_128    # Sabit MP3 128k

# Kullanıcı bazlı override (Admin Panel)
users.audio_preference = hls / mp3 / auto
1. Öncelik
Kullanıcı tercihi (admin ayarlar)
2. Öncelik
ENV varsayılan format
3. Öncelik
Cihaz kapasitesi (auto ise)

Not: iPhone/iPad için özel zorunluluk yok. ENV ne derse tüm cihazlarda o çalışır.

Nasıl Çalışacak?

HLS Seçilirse (Şifreli)

Playlist
Bizim sunucu
(imza eklenir)
Segment'ler
Bunny CDN
(hızlı + token)
Anahtar
Bizim sunucu
(güvenli)

✅ Tüm cihazlarda çalışır (iOS dahil)

MP3 Seçilirse (Şifresiz)

MP3 Dosyası
Bunny CDN
(hızlı + token korumalı)

✅ Tüm cihazlarda çalışır • Token ile indirme engeli

┌─────────────────────────────────────────────────────────────────┐
│                     KULLANICI ŞARKI İSTEDİ                      │
└─────────────────────────────────────────────────────────────────┘
                              │
                    ┌─────────┴─────────┐
                    │  Format ne?       │
                    │  (ENV + Tercih)   │
                    └─────────┬─────────┘
              ┌───────────────┴───────────────┐
              ▼                               ▼
       ┌─────────────┐                 ┌─────────────┐
       │     HLS     │                 │     MP3     │
       │  (Şifreli)  │                 │  (Şifresiz) │
       └──────┬──────┘                 └──────┬──────┘
              │                               │
              ▼                               ▼
       ┌─────────────┐                 ┌─────────────┐
       │ Playlist:   │                 │ Bunny CDN   │
       │ Local+İmza  │                 │ + Token     │
       │             │                 │             │
       │ Segment:    │                 │ (30dk süre) │
       │ Bunny+Token │                 │             │
       │             │                 │             │
       │ Anahtar:    │                 │             │
       │ Local+İmza  │                 │             │
       └─────────────┘                 └─────────────┘
              │                               │
              └───────────────┬───────────────┘
                              ▼
       ┌─────────────────────────────────────────────────────────┐
       │  🎵 Hızlı + Cache'li + Korumalı Müzik (Tüm Cihazlar)    │
       └─────────────────────────────────────────────────────────┘

Token Koruması (İndirme Engeli)

❌ Korumasız URL (Eski)

https://audio.muzibu.com/songs/mp3_128/12345.mp3

→ Herkes indirebilir
→ Link paylaşılabilir
→ Sonsuza kadar çalışır

✅ Token Korumalı URL (Yeni)

https://audio.muzibu.com/songs/mp3_128/12345.mp3
  ?token=a1b2c3d4e5f6
  &expires=1711378800

→ 30 dakika sonra link ölür
→ Token yanlışsa 403 hata
→ Paylaşılsa bile işe yaramaz

Bunny Panel Ayarı Gerekli

muzibu-audio-cdn Pull Zone → SecurityToken AuthenticationEnabled
Security Key oluştur ve .env dosyasına ekle

Yapılacaklar (6 Adım)

1

Bunny Token Auth Config

.env'ye BUNNY_STORAGE_TOKEN_KEY ekle, config/services.php'ye bağla

.env config/services.php
2

Bunny Token URL Metodu

generateBunnyTokenUrl() → URL'ye token + expire ekler

BunnyStorageService.php
3

HLS Segment'leri Bunny'ye Yönlendir

serveHls() içinde segment URL'lerini Bunny CDN + Token ile değiştir

SongStreamController.php serveHls()
4

MP3 URL'leri Bunny Token ile Oluştur

generateAudioCdnUrl() → Hybrid modda Bunny Token URL döndür

SignedUrlService.php
5

stream() inline playlist'lerde segment rewrite

master_inline ve playlists_inline içindeki segment URL'lerini Bunny'ye yönlendir

SongStreamController.php stream()
6

Test + Aktivasyon

BUNNY_STORAGE_MODE=hybrid yap → HLS/MP3 test → Token süresi testi

.env Test

Değişecek Dosyalar

Dosya Değişiklik Satır
.env BUNNY_STORAGE_TOKEN_KEY ekle +3
config/services.php bunny_storage → token_key +2
BunnyStorageService.php generateBunnyTokenUrl() metodu +40
SongStreamController.php serveHls() + stream() segment rewrite +60
SignedUrlService.php Bunny MP3 URL desteği +30
Toplam ~135 satır

Özet Kurallar

Format seçimi ENV'den kontrol edilir (MUZIBU_DEFAULT_AUDIO_FORMAT)
Kullanıcı bazlı override admin panel'den yapılır (audio_preference)
iPhone/iPad için özel zorunluluk yok - ENV ne derse o çalışır
HLS ve MP3 her iki format da Bunny'den serve edilir
Token koruması ile indirme engeli sağlanır (30dk süre)

Güvenlik + Geri Dönüş

✅ Avantajlar

  • • Migration YOK (sadece kod)
  • • Mevcut şarkılar zaten Bunny'de
  • • Token ile indirme engeli
  • • Cache ile hızlı erişim

🔙 Geri Dönüş

BUNNY_STORAGE_MODE=local

Anında eski sisteme döner, kod değişikliği gerekmez

Onayınız Bekleniyor

Bu planı onaylarsanız implementasyona başlayacağım.
Önce Bunny Panel'de Token Auth'u açmanız gerekecek.

"Onay" = Başla Değişiklik = Düzelt