Bunny Stream Derinlemesine Araştırma

Audio HLS Streaming, Fiyatlandırma, API, Güvenlik ve Entegrasyon Analizi

Müzik Platformu İçin Laravel Entegrasyonu DRM & Token Auth Maliyet Karşılaştırma

İçindekiler

Basit Anlatım (Herkes İçin)

Bunny Stream nedir? Bunny.net'in sunduğu bir video barındırma ve yayınlama servisidir. Video yüklersiniz, otomatik olarak farklı kalitelere dönüştürülür (düşük internet hızı olan kişiler düşük kalite, yüksek hızlı olanlar yüksek kalite izler). YouTube'un altyapısının minyatür hali gibi düşünebilirsiniz.

Bizi neden ilgilendiriyor? Şu anda şarkılarımızı kendi sunucumuzda HLS formatına çeviriyoruz (FFmpeg ile), kendi sunucumuzda saklıyoruz ve Bunny CDN üzerinden dağıtıyoruz. Bu iş sunucu gücü ve disk alanı harcıyor. Alternatif olarak:

Seçenek A - Bunny Stream: Şarkı dosyasını (MP3) Bunny'ye yüklüyoruz, onlar otomatik HLS'e çeviriyor, barındırıyor ve dağıtıyor. Biz hiçbir şey yapmıyoruz.

Seçenek B - Bunny Storage + CDN: Biz FFmpeg ile HLS'e çeviriyoruz (şu anki gibi), ama dosyaları kendi sunucumuz yerine Bunny Storage'a yüklüyoruz. Bunny CDN üzerinden dağıtıyoruz.

Seçenek C - Mevcut Sistem: Biz çeviriyoruz, kendi sunucumuzda saklıyoruz, Bunny CDN cache'liyor ve dağıtıyor.

Sonuç olarak ne öneriliyor? Aşağıdaki detaylı araştırmaya göre, bir müzik platformu için Seçenek B (Bunny Storage + CDN) veya Seçenek C'nin geliştirilmiş hali en mantıklı seçenek. Bunny Stream video için tasarlanmış, audio-only konusunda belirsizlikler var ve fiyat avantajı sınırlı.

1. Audio-Only HLS Desteği

Kabul Edilen Girdi Formatları

Bunny Stream'in resmi belgesine göre şu audio container formatları kabul ediliyor:

MP3 (.mp3) OGG (.ogg) WAV (.wav) M4A (.m4a) AAC (.aac) FLAC (.flac) TS (.ts)

Kritik Uyarı: Audio-Only Belirsizliği

Bunny Stream, girdi olarak MP3, WAV, OGG gibi audio dosyalarını kabul ediyor. Ancak aşağıdaki sorunlar var:

  • Bunny Stream birincil olarak video platformu olarak tasarlanmış
  • Resmi belgede "audio-only HLS output" açıkça belirtilmiyor
  • Çıktı olarak video-only çözünürlükler tanımlanıyor (240p-2160p)
  • Audio dosya yüklendiğinde nasıl bir HLS çıktı ürettiği net değil
  • Belgede "The platform does not output audio-only files - video encoding is required" notu var

Beklenen Sorunlar

  • Video çözünürlük zorunluluğu: Bunny Stream, yüklenen her dosya için video çözünürlükleri (240p, 360p, 480p, 720p, 1080p) oluşturur. Audio-only dosyada video track olmadığı için bu süreç başarısız olabilir veya siyah ekranlı video üretebilir.
  • Çoklu bitrate audio HLS: Kendi sistemimizde 128kbps ve 64kbps gibi iki farklı audio kalitesi oluşturuyoruz. Bunny Stream'in bunu desteklediğine dair belge yok.
  • Gereksiz bant genişliği: Eğer siyah ekranlı video üretirse, video track'i gereksiz bant genişliği tüketir.

Sonuç

Bunny Stream, müzik/audio streaming için ideal değil. Birincil olarak video platformu. Audio-only HLS'i doğal olarak desteklediğine dair resmi bir belge yok. Eğer kullanılacaksa, önce bir test MP3 yükleyip çıktının ne olduğunu görmek gerekir.

2. Fiyatlandırma Detayları

Bunny Stream Fiyatları

$0.01
/ GB Depolama (HDD)
Frankfurt ana bölge
$0.01
/ GB CDN (EU & NA)
Standart ağ
Ücretsiz
Transkoding (H.264)
Standart kodlama
Kalem Birim Fiyat Not
Depolama (HDD - Frankfurt) $0.01/GB Aylık
Geo-replikasyon (2. bölge) $0.01/GB Aylık, ek bölge
Geo-replikasyon (3.+ bölge) $0.005/GB Aylık, ek bölge başı
CDN - Avrupa & K.Amerika $0.010/GB Standart ağ
CDN - Asya & Okyanusya $0.030/GB Standart ağ
CDN - Güney Amerika $0.045/GB Standart ağ
CDN - Orta Doğu & Afrika $0.060/GB Standart ağ
CDN - Volume Ağ (0-500TB) $0.005/GB 10 PoP, global tek fiyat
Standart Encoding (H.264) ÜCRETSİZ 4K'ya kadar
Premium Encoding (720p+) $0.050/dk H.265, VP9, AV1
Premium Encoding (480p-) $0.025/dk SD içerik
AI Transkripsiyon $0.10/dk/dil Opsiyonel
MediaCage Enterprise DRM $99/ay + lisans FairPlay + Widevine
Minimum Aylık $1/ay Tüm hizmetler dahil

Muzibu İçin Tahmini Maliyet (Bunny Stream)

66 şarkı, ortalama 4 dakika, toplam ~2GB HLS dosya (multi-bitrate), aylık ~10GB trafik varsayımıyla:

Depolama (2GB)
$0.02/ay
CDN Trafik (10GB EU)
$0.10/ay
Encoding (Standart, H.264)
Ücretsiz
Minimum Fatura
$1.00/ay

Gerçek maliyet: $1/ay (minimum fatura). Büyüdükçe trafiğe göre artar.

3. Upload API

Genel Bilgiler

  • Base URL: https://video.bunnycdn.com
  • Kimlik doğrulama: AccessKey header'ı ile API key
  • Yükleme: İki adımlı süreç (Video oluştur + Dosya yükle)
  • Resumable Upload: TUS protokolü ile destekleniyor
  • Fetch from URL: Uzak URL'den otomatik indirme destekli

Adım 1: Video Nesnesi Oluştur

# POST - Video nesnesi oluştur
curl --request POST \
  --url https://video.bunnycdn.com/library/{libraryId}/videos \
  --header 'AccessKey: YOUR_STREAM_API_KEY' \
  --header 'accept: application/json' \
  --header 'content-type: application/json' \
  --data '{"title":"sarki-adi"}'

# Yanıt: { "videoLibraryId": 123, "guid": "abc-def-123", "title": "sarki-adi", ... }

Adım 2: Dosyayı Yükle

# PUT - Binary dosya yükle
curl --request PUT \
  --url https://video.bunnycdn.com/library/{libraryId}/videos/{videoId} \
  --header 'AccessKey: YOUR_STREAM_API_KEY' \
  --header 'Content-Type: application/octet-stream' \
  --data-binary '@/path/to/song.mp3'

# Yanıt: { "success": true, "message": "OK" }

# İsteğe bağlı parametreler (query string):
# ?enabledResolutions=240p,360p,480p,720p,1080p
# ?jitEnabled=true (Just-in-Time encoding)
# ?enabledOutputCodecs=x264,vp9

Alternatif: URL'den Çek

# POST - Uzak URL'den indir
curl --request POST \
  --url https://video.bunnycdn.com/library/{libraryId}/videos/fetch \
  --header 'AccessKey: YOUR_STREAM_API_KEY' \
  --header 'content-type: application/json' \
  --data '{"url":"https://example.com/song.mp3"}'

Erişim URL Formatları (Yükleme sonrası)

  • HLS Playlist: https://{pullzone}.b-cdn.net/{videoId}/playlist.m3u8
  • MP4 Fallback: https://{pullzone}.b-cdn.net/{videoId}/play_720p.mp4
  • Embed Player: https://video.bunnycdn.com/play/{libraryId}/{videoId}
  • Thumbnail: https://{pullzone}.b-cdn.net/{videoId}/thumbnail.jpg

PHP/Laravel İçin

Resmi ve topluluk paketleri mevcut:

  • BunnyWay/bunnystream-api-php - Resmi PHP SDK
  • ToshY/BunnyNet-PHP - Kapsamlı topluluk kütüphanesi
  • bangnokia/laravel-bunny-storage - Laravel Storage driver
  • itsemon245/laravel-bunny - Laravel Filesystem adapter

4. Transcoding & Adaptive Bitrate

Otomatik Çoklu Kalite

Bunny Stream yüklenen her videoyu seçilen çözünürlüklere otomatik olarak dönüştürür. Player, kullanıcının internet hızına göre en uygun kaliteyi seçer (Adaptive Bitrate Streaming).

Ücretsiz Encoding (H.264):

Çözünürlük Video Bitrate Audio Bitrate
2160p (4K)13,000 kbps256 kbps
1080p5,000 kbps192 kbps
720p2,800 kbps128 kbps
480p1,400 kbps128 kbps
360p800 kbps96 kbps
240p600 kbps96 kbps

Premium Encoding (Ücretli)

Ek codec'ler ve JIT encoding:

H.265 (HEVC): %20 daha küçük dosya boyutu
VP9: Google'ın açık codec'i
AV1: En yüksek sıkıştırma oranı
JIT Encoding: Anında oynatma başlatma

Audio İçin Önemli Not

Tüm bu çözünürlükler video çözünürlükleridir. Audio-only dosya yüklendiğinde sistemin 240p, 360p gibi video çözünürlükleri oluşturup oluşturmayacağı belirsiz. Audio bitrate'ler (96-256 kbps) video çözünürlüklerine bağlı olarak değişiyor - yani audio kalitesini bağımsız olarak kontrol edemeyebilirsiniz.

5. HLS Çıktı Formatı

HLS Yapısı

Bunny Stream, HLS (HTTP Live Streaming) formatında çıktı üretir. Standart yapı:

# URL Yapısı:
https://{pullzone}.b-cdn.net/{videoId}/playlist.m3u8    ← Master playlist
https://{pullzone}.b-cdn.net/{videoId}/play_720p.mp4    ← MP4 fallback

# Dahili yapı (Bunny Stream tarafından yönetilir):
/{videoId}/
├── playlist.m3u8          ← Master manifest (tüm kaliteler)
├── 240p/chunks.m3u8       ← 240p variant playlist
│   ├── segment-0.ts
│   └── segment-1.ts
├── 360p/chunks.m3u8       ← 360p variant playlist
├── 480p/chunks.m3u8
├── 720p/chunks.m3u8
├── 1080p/chunks.m3u8
├── play_720p.mp4          ← MP4 fallback (max 720p)
└── thumbnail.jpg

Özellikler

  • Adaptive Bitrate: Player, bant genişliğine göre kaliteyi otomatik değiştirir
  • MP4 Fallback: HLS desteklemeyen cihazlar için MP4 versiyonu (720p'ye kadar)
  • Multi-Audio: Birden fazla ses kanalı desteği (çok dilli video için)
  • Ayrı Audio Stream: Audio, video'dan bağımsız chunk'lara bölünebilir
  • Altyazı: VTT ve SRT formatında altyazı desteği

Bizim Mevcut Sistemle Karşılaştırma

Şu anda kendi oluşturduğumuz HLS yapısı:

# Bizim mevcut yapımız:
/storage/hls/{songId}/
├── master.m3u8           ← Master manifest
├── high/
│   ├── stream.m3u8       ← 128kbps variant
│   └── segment-*.ts
└── low/
    ├── stream.m3u8       ← 64kbps variant
    └── segment-*.ts

Bunny Stream'in HLS çıktısı standart olduğu için herhangi bir HLS uyumlu player ile çalışır. Ancak audio bitrate kontrolü sınırlı olabilir.

6. Şifreleme & DRM

Özellik MediaCage Basic MediaCage Enterprise
Fiyat Ücretsiz $99/ay + lisans
Şifreleme Türü Dynamic Clear Key FairPlay + Widevine
Tarayıcı Desteği Evet Evet
Mobil App Desteği Hayır Evet
Hardware Key Exchange Hayır Evet
Ekran Görüntüsü Engelleme Hayır Kısmen*
İndirme Engelleme Evet Evet

* Widevine L3 güvenlik seviyesindeki istemcilerde ekran görüntüsü engellenemiyor

Enterprise DRM Lisans Fiyatları

0 - 20,000 lisans
$0.005 / lisans
20,001 - 100,000 lisans
$0.004 / lisans
100,001 - 500,000 lisans
$0.003 / lisans
500,000+ lisans
Özel fiyat

1 lisans = 1 benzersiz video oynatma (cihaz başına). SD (<720p) içerik lisans ücreti gerektirmez.

AES-128 HLS Encryption Notu

Bunny Stream, klasik AES-128 HLS şifreleme (#EXT-X-KEY tag'i ile) sunmuyor. Bunun yerine kendi MediaCage sistemi var. Eğer kendi AES-128 anahtarlarınızla şifreleme yapmak istiyorsanız, bunu kendi FFmpeg pipeline'ınızda yapıp Bunny Storage'a yüklemeniz gerekir. Bunny Stream bu konuda esneklik sunmuyor.

7. Token Authentication

İki Farklı Seviye

Basic (MD5)

  • MD5 hash ile URL imzalama
  • Süre sınırı (expiry)
  • IP doğrulama (opsiyonel)
  • Basit kullanım senaryoları

V2 (SHA256) - Önerilen

  • SHA256 hash ile URL imzalama
  • Süre sınırı + IP doğrulama
  • Coğrafi kısıtlama
  • Directory token (HLS için kritik)
  • Hız sınırlama

Token V2 Algoritması

// Token oluşturma formülü:
token = Base64Encode(
    SHA256_RAW(
        security_key +
        signed_url_path +
        expiration_timestamp +
        (optional) remote_ip +
        (optional) encoded_query_parameters
    )
)

// Base64 temizleme:
token = str_replace(['\n', '+', '/', '='], ['', '-', '_', ''], token)

// URL formatı (query string):
https://cdn.example.com/path/file.m3u8?token=ABC123&expires=1702005952

// URL formatı (path-based - HLS için ideal):
https://cdn.example.com/bcdn_token=ABC123&expires=1702005952/path/file.m3u8

Directory Token - HLS İçin Mükemmel

token_path parametresi ile bir klasörün tamamı için tek token oluşturulabilir. Bu, HLS streaming için çok önemli çünkü:

  • Master playlist (.m3u8) için oluşturulan token, o klasördeki tüm .ts segment dosyalarını da kapsar
  • Her segment için ayrı token oluşturmaya gerek yok
  • Tek bir signed URL ile tüm HLS akışı korunur

PHP Uygulama Kodu

// ToshY/BunnyNet-PHP kütüphanesi ile:
use ToshY\BunnyNet\BunnyTokenAuthentication;

$auth = new BunnyTokenAuthentication(
    token: 'your-security-key',
    hostname: 'https://cdn.muzibu.com',
);

// Tek dosya imzalama:
$signedUrl = $auth->sign(
    file: '/songs/123/playlist.m3u8',
    expirationTime: 3600,  // 1 saat
    userIp: '1.2.3.4',     // opsiyonel
);

// Directory token (HLS tüm segmentler dahil):
$signedUrl = $auth->sign(
    file: '/songs/123/playlist.m3u8',
    expirationTime: 3600,
    isDirectoryToken: true,
    pathAllowed: '/songs/123/',  // Bu klasördeki her şey dahil
);

// Ülke kısıtlama:
$signedUrl = $auth->sign(
    file: '/songs/123/playlist.m3u8',
    expirationTime: 7200,
    countriesAllowed: 'TR,DE,NL',  // Sadece bu ülkeler
);

HLS Player Entegrasyonu

// JavaScript tarafında HLS.js ile:
var hls = new Hls();
hls.loadSource('https://cdn.muzibu.com/bcdn_token=TOKEN&expires=EXP/songs/123/playlist.m3u8');

// Veya Video.js HLS eklentisi ile:
videojs.Hls.xhr.beforeRequest = function(options) {
    if (options.uri.includes('.ts')) {
        options.uri += '?token=TOKEN&expires=EXP&token_path=/songs/123/';
    }
    return options;
};

8. Laravel Entegrasyonu

Seçenek A: Bunny Stream Entegrasyonu

Şarkı yükleme akışını Bunny Stream API'sine yönlendirmek:

// app/Services/BunnyStreamService.php
class BunnyStreamService
{
    private string $apiKey;
    private int $libraryId;

    public function uploadSong(Song $song, string $filePath): string
    {
        // Adım 1: Video nesnesi oluştur
        $response = Http::withHeaders([
            'AccessKey' => $this->apiKey,
        ])->post("https://video.bunnycdn.com/library/{$this->libraryId}/videos", [
            'title' => $song->title,
        ]);

        $videoId = $response->json('guid');

        // Adım 2: Dosyayı yükle
        Http::withHeaders([
            'AccessKey' => $this->apiKey,
            'Content-Type' => 'application/octet-stream',
        ])->withBody(
            file_get_contents($filePath), 'application/octet-stream'
        )->put("https://video.bunnycdn.com/library/{$this->libraryId}/videos/{$videoId}");

        // Adım 3: Bunny video ID'yi kaydet
        $song->update(['bunny_video_id' => $videoId]);

        // HLS URL: https://{pullzone}.b-cdn.net/{videoId}/playlist.m3u8
        return $videoId;
    }
}

Seçenek B: Bunny Storage Entegrasyonu

Mevcut HLS pipeline'ını koruyup dosyaları Bunny Storage'a yüklemek:

// config/filesystems.php
'bunny' => [
    'driver' => 'bunny',
    'storage_zone' => env('BUNNY_STORAGE_ZONE'),
    'api_key' => env('BUNNY_STORAGE_API_KEY'),
    'region' => env('BUNNY_STORAGE_REGION', 'de'), // Frankfurt
    'hostname' => env('BUNNY_CDN_HOSTNAME'),        // Pull Zone URL
],

// app/Services/HLSService.php - Mevcut sisteme ek
public function uploadToBunnyStorage(Song $song): void
{
    $hlsPath = "hls/{$song->id}";
    $localPath = storage_path("app/public/{$hlsPath}");

    // Tüm HLS dosyalarını Bunny Storage'a yükle
    foreach (File::allFiles($localPath) as $file) {
        $relativePath = str_replace($localPath, '', $file->getPathname());
        Storage::disk('bunny')->put(
            "songs/{$song->id}{$relativePath}",
            file_get_contents($file->getPathname())
        );
    }

    // Signed URL oluştur
    $signedUrl = $this->generateBunnySignedUrl(
        "/songs/{$song->id}/master.m3u8"
    );
}

// Bunny Storage Upload (ham HTTP ile)
private function uploadFile(string $remotePath, string $localFile): void
{
    Http::withHeaders([
        'AccessKey' => config('filesystems.disks.bunny.api_key'),
        'Content-Type' => 'application/octet-stream',
        'Checksum' => strtoupper(hash_file('sha256', $localFile)),
    ])->withBody(
        file_get_contents($localFile), 'application/octet-stream'
    )->put(
        "https://storage.bunnycdn.com/" .
        config('filesystems.disks.bunny.storage_zone') .
        "/{$remotePath}"
    );
}

Önemli Değişiklikler

  • Bunny Stream: Mevcut FFmpeg pipeline tamamen kaldırılır, SongStreamController HLS URL'lerini Bunny'den alır
  • Bunny Storage: FFmpeg pipeline korunur, sadece dosya kaydetme ve URL oluşturma değişir
  • Her iki durumda da SignedUrlService güncellenmeli (Bunny token auth'a geçiş)
  • Veritabanına bunny_video_id veya bunny_storage_path eklenmeli (migration gerekir!)

9. Bunny Storage + CDN Alternatifi

Nasıl Çalışır?

Bu yaklaşımda, kendi sunucumuzda FFmpeg ile HLS dosyalarını oluşturup Bunny Storage'a yüklüyoruz. Bunny CDN Pull Zone bu dosyaları dağıtıyor.

[1] MP3 yüklenir → Sunucumuz
[2] FFmpeg ile HLS oluştur → master.m3u8 + segments
[3] HLS dosyaları Bunny Storage'a yükle → PUT API
[4] Pull Zone bağla → CDN dağıtımı
[5] Token Auth ile koru → Signed URL

Bunny Storage API

# Dosya yükleme
PUT https://storage.bunnycdn.com/{storageZoneName}/{path}/{fileName}
Headers:
  AccessKey: STORAGE_ZONE_PASSWORD  (Account API key değil!)
  Content-Type: application/octet-stream
  Checksum: SHA256_HEX (opsiyonel, doğrulama için)
Body: Raw binary file content

# Bölge endpointleri:
storage.bunnycdn.com           # Frankfurt (DE)
ny.storage.bunnycdn.com        # New York (US)
la.storage.bunnycdn.com        # Los Angeles (US)
sg.storage.bunnycdn.com        # Singapur (SG)
syd.storage.bunnycdn.com       # Sydney (AU)

# Yanıt: 201 Created (başarılı) / 400 Bad Request (hata)
# Klasörler otomatik oluşturulur!

Bunny Storage Fiyatlandırma

Kalem Fiyat Not
Depolama (1-2 bölge) $0.01/GB/bölge Aylık
Depolama (3+ bölge) $0.005/GB/bölge Aylık
CDN Trafik (EU & NA) $0.01/GB Standart ağ, 119 PoP
CDN Trafik (Volume) $0.005/GB 10 PoP, global tek fiyat
Minimum $1/ay Tüm hizmetler

Avantajlar

  • Audio bitrate'ler üzerinde tam kontrol (128k, 64k, istediğin gibi)
  • Kendi AES-128 şifrelemeni uygulayabilirsin
  • HLS yapısı üzerinde tam kontrol (master.m3u8 formatı, segment süresi vs.)
  • Sunucu disk alanını boşaltır (HLS dosyaları Bunny'de)
  • Token Authentication V2 ile güvenlik
  • Bunny Stream'den daha ucuz (encoding ücreti yok)
  • Mevcut FFmpeg pipeline korunur, minimum kod değişikliği

Dezavantajlar

  • FFmpeg transkoding hala sunucumuzda (CPU yükü devam eder)
  • Yükleme süresi: Önce transcode, sonra upload (iki adım)
  • Bunny DRM (MediaCage) kullanılamaz
  • Upload kodunu yazmak ve bakımını yapmak gerekir

10. Bunny Stream vs Bunny Storage vs Mevcut Sistem

Kriter Bunny Stream Bunny Storage + CDN Mevcut Sistem
Transkoding Bunny yapar Ücretsiz Biz yaparız (FFmpeg) Biz yaparız (FFmpeg)
Audio-Only HLS Belirsiz Tam Kontrol Tam Kontrol
Audio Bitrate Kontrolü Sınırlı 128k/64k/32k 128k/64k
Depolama Bunny'de ($0.01/GB) Bunny'de ($0.01/GB) Kendi sunucu + CDN cache
CDN Dağıtım Bunny CDN ($0.01/GB) Bunny CDN ($0.01/GB) Bunny CDN (Pull Zone)
AES-128 Şifreleme Yok Kendi anahtarın Kendi anahtarın
DRM MediaCage Yok Yok
Token Auth Embed token V2 SHA256 Kendi signed URL
Sunucu CPU Yükü Sıfır FFmpeg yükü FFmpeg + Serve
Disk Kullanımı Sıfır Geçici Kalıcı ~2GB+
Upload Akışı MP3 → API → Otomatik MP3 → FFmpeg → Upload MP3 → FFmpeg → Yerel
Kod Değişikliği Büyük Orta Yok
Aylık Tahmini Maliyet ~$1 (min) ~$1 (min) $0 (CDN hariç)

Büyüme Senaryosu Analizi

1000 Şarkı / 100GB Trafik

Depolama (~30GB): $0.30
CDN (100GB EU): $1.00
Toplam: ~$1.30/ay

5000 Şarkı / 500GB Trafik

Depolama (~150GB): $1.50
CDN (500GB EU): $5.00
Toplam: ~$6.50/ay

10000 Şarkı / 2TB Trafik

Depolama (~300GB): $3.00
CDN (2TB EU): $20.00
Toplam: ~$23/ay

* Bunny Stream ve Bunny Storage fiyatlandırması aynı (depolama + CDN). Fark sadece encoding maliyetinde. Standart encoding ücretsiz olduğundan maliyet eşit.

Sonuç ve Öneri

Muzibu (Müzik Platformu) İçin Önerilen Strateji

1

Kısa Vadede (Şimdi): Mevcut sistemi iyileştir + Bunny CDN Pull Zone

Zaten yapıyoruz. FFmpeg ile HLS oluşturuyoruz, Bunny CDN cache'liyor. En az değişiklik, en az risk. Master.m3u8 + multi-bitrate yapısı tamamlandığında sistem zaten iyi çalışacak.

2

Orta Vadede (Büyüme): Bunny Storage + CDN'e Geçiş

Şarkı sayısı artıp disk alanı sorun olduğunda, HLS dosyalarını Bunny Storage'a taşı. FFmpeg pipeline korunur (audio kontrolü), sadece dosya depolama ve serve edilme yeri değişir. Token Auth V2 ile güvenlik sağlanır.

3

Bunny Stream: Video içerik eklenirse

Eğer video klip, konser videosu gibi video içerikler eklenecekse, o zaman Bunny Stream mantıklı olur. Audio-only için değil, video transkoding ihtiyacı olduğunda kullan.

Bunny Stream Neden Şu An İçin Uygun Değil?

  • Audio-only HLS desteği belirsiz: Resmi belge "video encoding is required" diyor
  • Audio bitrate kontrolü yok: Biz 128k/64k istiyoruz, onlar video çözünürlüğüne bağlı audio veriyor
  • Kendi AES-128 şifrelememizi kullanamayız: MediaCage veya hiçbir şey
  • Mevcut HLS altyapımız boşa gider: master.m3u8, multi-bitrate, SignedUrlService hepsi değişmeli
  • Fazladan bant genişliği: Video track (siyah ekran bile olsa) bant genişliği harcar

Bunny Storage + CDN Neden En İyi Orta Vade Seçenek?

  • Tam audio kontrol: FFmpeg ile istediğimiz bitrate'leri oluştururuz
  • AES-128 şifreleme: Kendi anahtarımızla devam edebiliriz
  • Disk alanı tasarrufu: HLS dosyaları sunucudan kaldırılır
  • Token Auth V2: Directory token ile HLS güvenliği
  • Minimum kod değişikliği: Sadece upload + URL generation kısmı değişir
  • Çok ucuz: $1/ay minimumla başlar, 1000 şarkıda bile ~$1.30/ay
  • Bunny CDN zaten kullanıyoruz: Aynı ekosistem, kolay geçiş

Kaynaklar ve Referanslar

18 Şubat 2026 • Muzibu.com.tr