Production Deployment Rehberi
Muzibu'daki şarkılar dinlenirken küçük parçalar halinde (segment) yükleniyor. Önceden bu parçalar 6 saniyeydi, şimdi tüm kalite seviyelerinde 4 saniye olarak standardize edildi.
Neden Önemli? 4 saniye segment, Apple HLS standardına uygun ve tüm varyantlar arasında tutarlılık sağlıyor. Bu sayede adaptive bitrate (otomatik kalite geçişi) daha yumuşak çalışıyor.
| # | Dosya | Değişiklik |
|---|---|---|
| 1 | ConvertToHLSJob.php |
FFmpeg'e -profile:a aac_low -ar 48000 -ac 2 eklendi |
| 2a | HLSService.php:125 |
$targetBitrate undefined bug fix |
| 2b | HLSService.php:158 |
buildFFmpegCommand() internal helper olarak işaretlendi |
| 2c | HLSService.php:469 |
Yorum düzeltmesi: enc.key → enc.bin |
| 3 | AddHlsVariantsCommand.php |
--re-encode-high flag'i eklendi |
| 4 | ConvertSongToHLS.php |
Silindi (ölü kod — 10sn segment, encryption yok) |
| 5 | routes/web.php:161 |
/stream/key/ eski route kaldırıldı |
| 6 | hls-streaming.blade.php |
Dokümantasyon güncellendi (dosya yapısı, URL formatları) |
-map 0:a -c:a aac -b:a {orijinal}k
-profile:a aac_low -ar 48000 -ac 2
-af {Ultimate Edition filters}
-hls_time 4 -hls_list_size 0
-hls_playlist_type vod
-hls_key_info_file {enc.keyinfo}
-c:a aac -b:a 128k
-profile:a aac_low -ar 44100 -ac 2 -vn
-hls_time 4 -hls_list_size 0
-hls_playlist_type vod
-hls_key_info_file {enc.keyinfo}
-c:a aac -b:a 64k
-profile:a aac_low -ar 22050 -ac 1 -vn
-hls_time 4 -hls_list_size 0
-hls_playlist_type vod
-hls_key_info_file {enc.keyinfo}
-c:a aac -b:a 32k
-profile:a aac_low -ar 22050 -ac 1 -vn
-hls_time 4 -hls_list_size 0
-hls_playlist_type vod
-hls_key_info_file {enc.keyinfo}
storage/tenant{id}/app/public/muzibu/hls/{song_id}/
├── enc.bin ← 16 byte AES-128 key (binary)
├── enc.keyinfo ← 3 satır: URI + path + IV
├── master.m3u8 ← 4 varyant referansı
├── playlist.m3u8 ← high kalite (4sn, VOD, encrypted)
├── segment-*.ts ← high segment'ler
├── ultralow/
│ ├── enc.keyinfo ← aynı key, farklı IV, ?v=ultralow
│ ├── playlist.m3u8 ← 32kbps, mono, 22050Hz, 4sn, VOD
│ └── segment-*.ts
├── low/
│ ├── enc.keyinfo
│ ├── playlist.m3u8 ← 64kbps, mono, 22050Hz, 4sn, VOD
│ └── segment-*.ts
└── mid/
├── enc.keyinfo
├── playlist.m3u8 ← 128kbps, stereo, 44100Hz, 4sn, VOD
└── segment-*.ts
storage/tenant{id}/app/public/muzibu/songs/mp3_128/
└── {song_id}.mp3 ← 128kbps MP3 fallback
cd /var/www/vhosts/muzibu.com/httpdocs
git pull origin main
# Cache temizle
php artisan cache:clear
php artisan route:clear
php artisan config:clear
php artisan view:clear
composer dump-autoload
# Önce 10 şarkıyla test et
php artisan tenants:run hls:add-variants --tenants=1001 \
--option="quality=all" \
--option="mp3-128=1" \
--option="refresh-master=1" \
--option="re-encode-high=1" \
--option="limit=10"
Sonucu kontrol et: segment süreleri 4sn mi? Tüm varyantlar oluştu mu?
3 terminal açarak paralel çalıştır. Her terminal farklı offset ile başlasın:
# Terminal 1: İlk 10.000 şarkı
php artisan tenants:run hls:add-variants --tenants=1001 \
--option="quality=all" --option="mp3-128=1" \
--option="refresh-master=1" --option="re-encode-high=1" \
--option="limit=10000" --option="offset=0"
# Terminal 2: 10.001 - 20.000
php artisan tenants:run hls:add-variants --tenants=1001 \
--option="quality=all" --option="mp3-128=1" \
--option="refresh-master=1" --option="re-encode-high=1" \
--option="limit=10000" --option="offset=10000"
# Terminal 3: 20.001 - 30.000
php artisan tenants:run hls:add-variants --tenants=1001 \
--option="quality=all" --option="mp3-128=1" \
--option="refresh-master=1" --option="re-encode-high=1" \
--option="limit=10000" --option="offset=20000"
Tahmini Süre: ~30K şarkı x 4 varyant x ~6sn = ~20 saat (3 paralel = ~7 saat)
# Rastgele 10 şarkı kontrol
for id in $(shuf -i 1-30000 -n 10); do
DIR="storage/tenant1001/app/public/muzibu/hls/$id"
if [ -d "$DIR" ]; then
echo "=== Song #$id ==="
# 4 varyant kontrolü
for v in playlist ultralow/playlist low/playlist mid/playlist; do
[ -f "$DIR/$v.m3u8" ] && echo " OK: $v.m3u8" || echo " EKSIK: $v.m3u8"
done
# Segment süresi kontrolü
grep '#EXTINF' "$DIR/playlist.m3u8" | head -3
# master.m3u8 kontrolü
cat "$DIR/master.m3u8" 2>/dev/null | head -5
fi
done
php artisan cache:clear
php artisan view:clear
php artisan responsecache:clear
Re-encode işlemi mevcut dosyaların üzerine yazar. Geri almak için:
git checkout -- .--re-encode-high olmadan tekrar çalıştır (sadece variant)| Varyant | Dosya | Segment | Durum |
|---|---|---|---|
| high (orijinal) | 66/66 | 4 sn | ✅ Re-encoded |
| ultralow (32k) | 66/66 | 4 sn | ✅ |
| low (64k) | 66/66 | 4 sn | ✅ |
| mid (128k) | 66/66 | 4 sn | ✅ |
| MP3 128k | 66/66 | — | ✅ |
| master.m3u8 | 66/66 | — | ✅ 4 varyant |
| enc.keyinfo URI | 264/264 | — | ✅ /hls-key/ |
| VOD tipi | 264/264 | — | ✅ |
| Dosya | İşlem | Neden |
|---|---|---|
ConvertSongToHLS.php |
Silindi | 10sn segment, encryption yok, dispatch yok — ConvertToHLSJob ile değiştirilmişti |
routes/web.php:161 |
Route kaldırıldı | /stream/key/ eski format — /hls-key/ ile değiştirilmişti |
hls-streaming.blade.php |
Güncellendi | enc.key→enc.bin, /stream/key/→/hls-key/, dosya yapısı, v7+ özellikleri |
php artisan tenants:run hls:add-variants --tenants=1001
Seçenekler:
--option="quality=all" Tüm varyantlar (ultralow + low + mid)
--option="quality=low" Sadece low varyant
--option="mp3-128=1" 128kbps MP3 de üret
--option="refresh-master=1" master.m3u8'i yeniden oluştur
--option="re-encode-high=1" High playlist'i 4sn segment ile yeniden oluştur
--option="song=123" Belirli bir şarkı ID
--option="limit=100" Maksimum işlenecek şarkı
--option="offset=0" Atlanacak şarkı (paralel batch için)
--option="dry-run=1" Sadece sayıları göster, işlem yapma