🎵 HLS 6 Saniye Segment Migrasyon Planı

Kötü Cihazlarda Donma Sorunu Çözümü

📅 19 Şubat 2026 🎯 32,515 Şarkı ⏱️ Tahmini: 2-3 saat

📋 Genel Bakış

🎯 Amaç

HLS segment süresini 10 saniye → 6 saniye düşürerek kötü cihazlarda (düşük RAM, eski telefonlar) donma sorununu çözmek.

💡 Neden Gerekli?

  • 10 saniyelik segmentler büyük bellek blokları oluşturuyor
  • Eski cihazlar RAM'i doldurunca donuyor/takılıyor
  • backBufferLength: 0 ile birlikte kullanınca optimal sonuç
  • Daha küçük parçalar = Daha akıcı bellek yönetimi

📊 Beklenen Fayda

📱
Eski Cihazlar
%60 Daha Az Donma
💾
Bellek Kullanımı
%40 Azalma
Başlatma Hızı
%30 Daha Hızlı

⚙️ Teknik Detaylar

📊 Segment Değişiklikleri

❌ ÖNCE (10s)
TARGETDURATION: 10
Segment sayısı: ~20
LOW segment: ~38KB
HIGH segment: ~350KB
✅ SONRA (6s)
TARGETDURATION: 6
Segment sayısı: ~34
LOW segment: ~23KB
HIGH segment: ~210KB

🎯 Hangi Kaliteler Etkilenir?

HIGH (320k) - Ana playlist, eski segmentler
LOW (64k) - Yeni oluşturulmuş klasör
ULTRALOW (32k) - Yeni oluşturulmuş klasör
enc.bin, enc.keyinfo - Dokunulmayacak (şifreleme)

🔄 Migrasyon Stratejisi

✅ Seçilen Yöntem: Geçici Klasör (.tmp_migrate/)

En güvenli yöntem. Kullanıcı dinlerken bile sorun çıkarmaz.

📂 Klasör Yapısı

storage/.../hls/27257/
├── segment-000.ts (10s) ← ESKİ, ŞİMDİLİK DURUYOR
├── segment-001.ts (10s)
├── playlist.m3u8 (TARGETDURATION:10)
├── low/
│   ├── segment-*.ts
│   └── playlist.m3u8
├── ultralow/
│   ├── segment-*.ts
│   └── playlist.m3u8
└── .tmp_migrate/
    ├── segment-000.ts (6s) ← YENİ
    ├── segment-001.ts (6s)
    ├── segment-002.ts (6s)
    ├── playlist.m3u8.new (TARGETDURATION:6)
    ├── low/
    │   └── segment-*.ts (6s)
    └── ultralow/
        └── segment-*.ts (6s)

🔄 İşlem Akışı

1
Geçici Klasör Oluştur
.tmp_migrate/ klasörü oluşturuluyor
2
Yeni Segmentleri Oluştur
FFmpeg ile 6 saniyelik segmentler encode ediliyor
3
Playlist Güncelle
TARGETDURATION:10 → 6 değişikliği
4
Atomik Swap
Tüm dosyalar hazır olunca tek seferde taşınıyor
5
Eski Dosyaları Sil
10 saniyelik eski segmentler temizleniyor
6
İzin Düzeltme
tuufi.com_:psaserv 644/755

📝 Adım Adım Uygulama Planı

1 Test Aşaması (10 Şarkı)

✓ Script'i test et
✓ Sonuçları kontrol et (segment sayısı, boyut, TARGETDURATION)
✓ Browser'da çalma testi yap
✓ Bellek kullanımını ölç
Tahmini: 5 dakika

2 Paralel Worker Başlatma (4 Worker)

Worker 1: 0-8,128 şarkı
Worker 2: 8,129-16,257 şarkı
Worker 3: 16,258-24,386 şarkı
Worker 4: 24,387-32,514 şarkı
Tahmini: 2-3 saat (paralel)

3 İlerleme Takibi

# Worker logları
tail -f /tmp/hls_segment_migrate_worker*.log

# Tamamlanan şarkı sayısı
find storage/tenant1001/app/public/muzibu/hls -name ".tmp_migrate" -type d | wc -l

4 Sonuç Kontrolü

✓ Başarılı/başarısız sayıları kontrol et
✓ Örnek şarkılarda playlist kontrolü (TARGETDURATION:6)
✓ Browser test (çalma, şarkı geçişi, bellek)
✓ Mobil cihazda test (eski telefon)

⚠️ Riskler ve Önlemler

Risk 1: Disk Alanı Dolması
Geçici klasörler 2x disk alanı kullanır
✅ Önlem:
Önce disk alanı kontrol et: df -h
Batch işleme (1000'er şarkı grupla)
⚠️ Risk 2: FFmpeg Hatası
Bazı şarkılarda MP3 corrupt olabilir
✅ Önlem:
Hata alınırsa skip, log'a kaydet
Geçici klasör kalır, manuel müdahale gerekir
⚠️ Risk 3: Kullanıcı Dinlerken Kesinti
Swap anında kısa kesinti olabilir
✅ Önlem:
Atomik mv komutu (0.001s)
Player auto-retry mekanizması zaten var
Risk 4: İzin Sorunları
Yeni dosyalar root:root ile oluşabilir
✅ Önlem:
Her şarkı sonrası chown tuufi.com_:psaserv
Dosya: 644, Klasör: 755

↩️ Geri Alma Planı (Rollback)

Sorun çıkarsa eski duruma nasıl döneriz?

🔄 Senaryo 1: Migrasyon Ortasında Sorun

# Worker'ları durdur
pkill -f "hls:migrate-segments"

# Geçici klasörleri temizle
find storage/tenant1001/app/public/muzibu/hls -name ".tmp_migrate" -type d -exec rm -rf {} +

# Eski segmentler hala yerinde, hiçbir şey değişmedi ✅

🔄 Senaryo 2: Migrasyon Bitti Ama Sorun Var

❌ Problem:
Eski segmentler silinmiş, geri almak zor!
✅ Çözüm:
Yeniden 10s segment oluştur (3 saat iş)
VEYA backup'tan geri yükle (varsa)
💡 Öneri: Backup Oluştur
İlk 100 şarkının eski segmentlerini yedekle (test için)
mkdir -p /tmp/hls_backup_10s
# İlk 100 şarkıyı yedekle
# Sorun olursa geri yükle

💻 Komutlar ve Script

1. Test Komutu (10 Şarkı)

php artisan hls:migrate-segments --limit=10 --dry-run
# Dry-run: Sadece göster, işlem yapma
# Sonuç: 10 şarkıda ne olacağını gör

2. Gerçek Test (10 Şarkı)

php artisan tenants:run hls:migrate-segments --tenants=1001 --option="limit=10"
# 10 şarkıda gerçek migrasyon
# Sonuç kontrol: Başarılı mı?

3. Tam Migrasyon (4 Worker Paralel)

# Worker 1
nohup php artisan tenants:run hls:migrate-segments --tenants=1001 --option="offset=0" --option="limit=8129" > /tmp/hls_segment_migrate_worker1.log 2>&1 &

# Worker 2
nohup php artisan tenants:run hls:migrate-segments --tenants=1001 --option="offset=8129" --option="limit=8129" > /tmp/hls_segment_migrate_worker2.log 2>&1 &

# Worker 3
nohup php artisan tenants:run hls:migrate-segments --tenants=1001 --option="offset=16258" --option="limit=8129" > /tmp/hls_segment_migrate_worker3.log 2>&1 &

# Worker 4
nohup php artisan tenants:run hls:migrate-segments --tenants=1001 --option="offset=24387" --option="limit=8128" > /tmp/hls_segment_migrate_worker4.log 2>&1 &

# Logları izle
tail -f /tmp/hls_segment_migrate_worker*.log

4. İlerleme Kontrol

# Kaç şarkı tamamlandı?
find storage/tenant1001/app/public/muzibu/hls -name ".tmp_migrate" -type d | wc -l

# Worker'lar çalışıyor mu?
ps aux | grep "hls:migrate-segments" | grep -v grep

🎯 Sonraki Adımlar

1
Script Oluştur
Laravel Artisan command: MigrateHlsSegmentsCommand
2
10 Şarkıda Test
Sonuçları kontrol et, sorun varsa düzelt
3
Browser Test
Masaüstü + mobil cihazda çalma testi
4
Tam Migrasyon Başlat
4 worker paralel, 2-3 saat
5
Sonuç Raporu
Başarı/başarısızlık istatistikleri, performans ölçümü

✅ MİGRASYON BİTTİKTEN SONRA YAPMAMIZ GEREKENLER

🔍 1. Doğrulama (Verification)

✓ Playlist Kontrol
# Rastgele 10 şarkıda TARGETDURATION kontrol
for i in {1..10}; do
    SONG_ID=$(shuf -i 1-40000 -n 1)
    grep "TARGETDURATION" storage/tenant1001/app/public/muzibu/hls/$SONG_ID/playlist.m3u8
done
# Hepsi "6" olmalı
Beklenen: #EXT-X-TARGETDURATION:6
✓ Segment Sayısı Kontrol
# Rastgele şarkıda segment sayısı
ls -1 storage/tenant1001/app/public/muzibu/hls/27257/segment-*.ts | wc -l
# Önceki ~20 ise, şimdi ~34 olmalı (60% artış)
✓ Geçici Klasör Temizliği
# .tmp_migrate/ klasörü kalmamalı
find storage/tenant1001/app/public/muzibu/hls -name ".tmp_migrate" -type d | wc -l
# Sonuç: 0 (sıfır) olmalı
⚠️ Sıfır değilse: Başarısız migrasyonlar var, manuel müdahale gerekli
✓ Dosya Boyutu Kontrolü
# LOW segment ortalama boyut
du -sh storage/tenant1001/app/public/muzibu/hls/27257/low/segment-*.ts | awk '{sum+=$1; count++} END {print sum/count}'
# Beklenen: ~23KB (önceki ~38KB)

🧪 2. Gerçek Kullanıcı Testi

✓ Browser Test (Masaüstü)
  • Şarkı çalma testi (5-10 şarkı)
  • Şarkı atlama (ileri/geri)
  • Queue sistemi (otomatik geçiş)
  • Developer Tools → Network → segment-*.ts dosyalarını kontrol (6s olmalı)
  • Console'da hata var mı?
✓ Mobil Test (Eski Telefon - KRİTİK!)
  • Hedef: 2-3 yıllık Android telefon (düşük RAM)
  • 3-4 şarkı arka arkaya çal
  • Donma/takılma var mı? (AMAÇ: OLMASIN!)
  • Bellek kullanımı: Settings → Developer Options → Running Services
  • Chrome DevTools Remote Debugging ile bellek grafiği çıkar
✓ Bellek Kullanımı Ölçümü
Chrome DevTools:
1. F12 → Performance → Memory sekmesi
2. "Record" başlat
3. 3 şarkı çal
4. "Stop" → Bellek grafiği oluşur
5. Peak memory kontrol et
Beklenen: ÖNCE: ~150MB peak → SONRA: ~90MB peak (40% azalma)

📊 3. İstatistik & Rapor Oluştur

✓ Başarı/Başarısızlık Sayıları
# Worker loglarından çıkar
grep "✅ Sonuç:" /tmp/hls_segment_migrate_worker*.log
# Örnek: ✅ Sonuç: 8129 başarılı, 5 başarısız
✓ Disk Tasarrufu
# Toplam HLS klasör boyutu (önce/sonra)
du -sh storage/tenant1001/app/public/muzibu/hls/
# Beklenen: ~10-15% azalma (küçük segmentler = az overhead)
✓ Başarısız Şarkıları Listele
# .tmp_migrate/ kalan şarkılar = başarısız
find storage/tenant1001/app/public/muzibu/hls -name ".tmp_migrate" -type d | sed 's|.*/hls/||' | sed 's|/.*||'
# Bu song ID'leri manuel kontrol et
📄 HTML Rapor v2 Oluştur
• Migrasyon tamamlandı tarihi/saati
• Toplam işlenen şarkı sayısı
• Başarılı/başarısız breakdown
• Ortalama segment boyutu (önce/sonra)
• Bellek kullanımı karşılaştırması
• Test sonuçları (mobil donma var mı?)
• Kullanıcı geri bildirimleri (ilk gün)

🧹 4. Temizlik İşlemleri

✓ Başarısız Migrasyon Temizliği
# Eğer .tmp_migrate/ kaldıysa (başarısız), manuel temizle
find storage/tenant1001/app/public/muzibu/hls -name ".tmp_migrate" -type d -exec rm -rf {} +
# ⚠️ Dikkat: Bu şarkılarda migrasyon YAPILMAMIŞ demektir, eski 10s segmentler hala var
✓ Log Dosyalarını Arşivle
mkdir -p /var/log/hls_migration/2026-02-19
mv /tmp/hls_segment_migrate_worker*.log /var/log/hls_migration/2026-02-19/
gzip /var/log/hls_migration/2026-02-19/*.log
✓ Başarısız Şarkılar İçin Liste
Başarısız şarkıları failed_migrations.txt dosyasına kaydet
find storage/tenant1001/app/public/muzibu/hls -name ".tmp_migrate" -type d | sed 's|.*/hls/||' | sed 's|/.*||' > failed_migrations.txt
# Manuel inceleme için

📡 5. İlk Gün Monitoring (KRİTİK!)

⚠️ İzlenecek Metrikler
  • Error Rate: HLS segment 404 hataları arttı mı?
  • User Complaints: "Müzik çalmıyor" şikayeti var mı?
  • Server Load: CPU/RAM/Disk kullanımı normal mi?
  • Player Analytics: Donma/jank event sayısı azaldı mı?
✓ Laravel Log Kontrol
tail -f storage/logs/laravel.log | grep "HLS"
# 404 veya 500 hatası var mı?
✓ Debug Panel İstatistik
a-html.txt buffer raporu kontrol et:
  • Donma sayısı azaldı mı?
  • HLS hata sayısı arttı mı?
  • Bellek peak değerleri düştü mü?

📋 6. Sonuç Raporu HTML v2

Migrasyon tamamlandıktan 24 saat sonra detaylı rapor hazırla:
✅ Raporda Olması Gerekenler:
📊 İstatistikler
  • Toplam işlenen şarkı
  • Başarılı/başarısız sayıları
  • Ortalama segment boyutu
  • Toplam disk tasarrufu
🧪 Test Sonuçları
  • Browser test sonucu
  • Mobil test sonucu
  • Bellek karşılaştırması
  • Donma durumu (var/yok)
📈 Performans
  • Error rate değişimi
  • Sunucu load değişimi
  • Başlatma hızı iyileşmesi
💬 Kullanıcı Geri Bildirimi
  • Şikayet sayısı
  • Olumlu geri bildirimler
  • Tespit edilen sorunlar
Rapor Konumu: public/readme/2026/02/[GÜN]/hls-6s-segment-migrasyon/v2/