Müzik parçacıklarını küçültüyoruz, tarayıcı nefes alacak
Şarkıyı pizza gibi düşün. Tek büyük pizza yerine dilimlere bölünmüş:
Tarayıcı her segmenti indirip çalarken bellekte geçici "çöp" oluşuyor. Bu çöpü temizlemek için zaman zaman tüm işi bırakıp temizliğe başlıyor. Bu temizlik süresi = donma.
11 saatlik müzik dinledikten sonra bellek o kadar dağınık hale geliyor ki temizlik 958ms sürüyor. Neredeyse 1 saniye müzik donuyor!
Çalınan segmentleri bellekte tutmayı durdurduk. Şarkı geçişlerinde oluşan ani çöp miktarı %60 azaldı. Bu tek değişiklik bile büyük fark yaratacak.
Tüm şarkıların normal kalite .ts dosyaları yeniden encode edilecek. Her parça küçülecek, GC'nin temizleyeceği çöp daha az olacak. Bunun için aşağıdaki AI promptu kullanılacak.
backBuffer fix sonrası test, ardından segment encode sonrası test. Donma sayısı 0'a inmeli.
| Süre | HTTP İstek/Şarkı | İlk Ses | GC | Sonuç |
|---|---|---|---|---|
| 4s | ~50 istek | 4s ✅ | Az ✅ | Sunucuya fazla yük ⚠️ |
| 6s ⭐ | ~33 istek | 6s ✅ | Az ✅ | Tatlı nokta 🎯 |
| 8s | ~25 istek | 8s ⚠️ | Orta | Kabul edilebilir |
| 10s | ~20 istek | 10s ❌ | Fazla ❌ | Mevcut sorun 💀 |
Bu promptu başka bir AI'a ver — segment migrasyonunu yapsın
═══════════════════════════════════════════════════════════════
GÖREV: HLS normal kalite segmentlerini 10 saniyeden 6 saniyeye
yeniden encode et, eskileri sil
SUNUCU: muzibu.com (CANLI PROD - çok dikkatli ol!)
DİL: Türkçe yanıt ver
⚠️ ÖNEMLI NOT:
Bu prompt mztest.muzibu.com (test sunucusu) üzerinde hazırlandı.
Asıl işlem PRODUCTİON sunucusunda yapılacak: muzibu.com
Prod dizin yolu: /var/www/vhosts/muzibu.com/httpdocs/
Test dizin yolu: /var/www/vhosts/mztest.muzibu.com/httpdocs/
(Aşağıdaki tüm yollarda mztest.muzibu.com → muzibu.com olarak oku!)
═══════════════════════════════════════════════════════════════
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. MEVCUT DURUM
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HLS dosyaları şu yerde (PROD):
/var/www/vhosts/muzibu.com/httpdocs/storage/tenant1001/app/public/muzibu/hls/
Her şarkı için klasör yapısı:
hls/{song_id}/
├── segment-000.ts ← BUNLAR 10s, DEĞİŞECEK
├── segment-001.ts ← BUNLAR 10s, DEĞİŞECEK
├── ...
├── playlist.m3u8 ← YENİDEN ÜRETILECEK (6s)
├── master.m3u8 ← güncellenmesi gerekebilir
├── enc.bin ← DOKUNMA (şifreleme anahtarı)
├── enc.keyinfo ← DOKUNMA (şifreleme bilgisi)
├── low/ ← DOKUNMA (zaten 4s, iyi)
└── ultralow/ ← DOKUNMA (zaten 4s, iyi)
Mevcut normal kalite playlist.m3u8 örneği:
#EXT-X-TARGETDURATION:10
#EXTINF:10.005333,
segment-000.ts
Hedef (6s sonrası):
#EXT-X-TARGETDURATION:6
#EXTINF:6.000000,
segment-000.ts
PHP binary: /opt/plesk/php/8.3/bin/php
Servis dosyası: app/Services/Muzibu/HLSService.php
Ana dizin (PROD): /var/www/vhosts/muzibu.com/httpdocs
Dosya sahibi (prod): tuufi.com_:psaserv (mztest'ten farklı!)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2. ÖNCE ANLA - SONRA YAP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Başlamadan şunları öğren:
A) Kaç şarkının normal segmenti var?
(low/ ve ultralow/ içindekiler hariç sadece root'taki segment-*.ts)
B) HLSService.php'i oku:
- Normal kalite için FFmpeg parametreleri neler?
- Bitrate, sample rate, codec ne?
- CHUNK_DURATION sabiti nerede, nasıl kullanılıyor?
- AES-128 şifreleme nasıl uygulanıyor? enc.keyinfo formatı ne?
C) master.m3u8 içeriğine bak (örn: hls/34461/master.m3u8):
Normal kaliteye olan referans nasıl yazılmış?
D) Şarkı tablosunda HLS ile ilgili hangi alanlar var?
(hls_url, hls_path, hls_status vs.)
DB'ye yazma YOK ama bağımlılık var mı diye bilmek lazım
E) Mevcut encode artisan command'i var mı?
/opt/plesk/php/8.3/bin/php artisan list | grep -i hls
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
3. MİGRASYON STRATEJİSİ (SIRASINI BOZMA!)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AŞAMA 1 — TEK ŞARKI TEST (song_id: 34461)
1a. Mevcut playlist.m3u8 ve segment-*.ts'leri yedekle:
/tmp/hls_backup_34461/ klasörüne kopyala
1b. Orijinal ses dosyasını bul (.mp3 veya .aac)
1c. FFmpeg ile 6s segmentler üret:
- Geçici klasöre yaz
- AYNI bitrate, codec, sample rate kullan
- AES-128 şifrelemeyi aynı enc.bin ile uygula
- enc.keyinfo dosyasını doğru referans et
1d. Yeni playlist.m3u8 üret (6s TARGETDURATION ile)
1e. TEST: Yeni playlist'i kontrol et:
- Şarkı ~200s ise: 200/6 ≈ 34 segment olmalı
- TARGETDURATION:6 yazıyor mu?
- EXTINF değerleri ~6s mi?
1f. Eski dosyaları SİLME, önce kullanıcıdan onay iste
AŞAMA 2 — TOPLU MİGRASYON (kullanıcı onayı sonrası)
2a. Tüm song_id'leri bul (sadece kök dizinde segment-*.ts olanlar)
2b. Her şarkı için:
- Orijinal ses dosyası var mı? (yoksa atla, log'a yaz)
- 6s segmentler üret → önce geçici klasöre
- Üretim başarılı mı? (segment sayısı mantıklı mı?)
- BAŞARILI ise: eski segment-*.ts'leri sil, yenileri yerleştir
- playlist.m3u8'i güncelle
- Dosya izinlerini düzelt:
sudo chown mztest:psacln {dosya}
sudo chmod 644 {dosya}
- HATA ise: o şarkıyı atla, log'a yaz, devam et
2c. Her 10 şarkıda bir ilerleme raporu ver
2d. Hata olan şarkıları /tmp/hls_migrate_errors.log'a yaz
AŞAMA 3 — DOĞRULAMA
3a. Rastgele 5 şarkı seç:
- playlist.m3u8'de TARGETDURATION:6 var mı?
- EXTINF değerleri ~6s mi?
- Segment sayısı: (şarkı süresi / 6) ile uyuşuyor mu?
3b. enc.bin dosyaları hâlâ yerinde mi? (dokunulmadı mı?)
3c. low/ ve ultralow/ klasörleri hâlâ 4s mi? (dokunulmadı mı?)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
4. KRİTİK UYARILAR
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
❌ DOKUNMA:
- low/ klasörleri (zaten 4s)
- ultralow/ klasörleri (zaten 4s)
- enc.bin dosyaları (şifreleme anahtarı, değişirse şarkı çalmaz)
- enc.keyinfo dosyaları
- Veritabanı tabloları
- .env dosyası
- player-core.js
- php artisan migrate çalıştırma
⚠️ DİKKAT:
- Encode sırasında orijinal kaliteyi koru (bitrate, codec değişmesin)
- Şifreleme parametreleri HLSService.php ile AYNI olmalı
- playlist.m3u8 URI yolları relative kalmalı (segment-000.ts, tam URL değil)
- enc.bin URI'si absolute URL olmalı (playlist içinde tam URL)
- Eski .ts dosyaları SADECE yeni playlist.m3u8 oluştuktan sonra sil
✅ ZORUNLU:
- Her encode sonrası dosya izinlerini düzelt (PROD için):
sudo chown tuufi.com_:psaserv {dosya} && sudo chmod 644 {dosya}
- Hata halinde o şarkıyı atla, log'a yaz, dur değil devam et
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
5. BAŞARI KRİTERLERİ
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ Tüm normal kalite playlist.m3u8 → TARGETDURATION:6
✅ Eski 10s segment-*.ts dosyaları yok
✅ Yeni 6s segment-*.ts dosyaları yerinde
✅ enc.bin / enc.keyinfo dokunulmamış
✅ low/ ve ultralow/ klasörleri dokunulmamış
✅ Dosya sahipleri (PROD): tuufi.com_:psaserv, izin: 644
✅ Hata olan şarkılar raporlandı
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
6. RAPORLAMA
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AŞAMA 1 bitince KULLANICIDAN ONAY İSTE, toplu işleme geçme.
Toplu işlem bitince söyle:
- Toplam kaç şarkı işlendi?
- Kaçı başarılı?
- Kaçı hata verdi? (song_id listesi)
- Kaçı atlandı? (orijinal ses dosyası yok)
- Toplam disk farkı ne oldu?
- 3 örnek şarkının playlist.m3u8 ilk 5 satırını göster