# Video Storage Fix - Solusi Masalah Video Player

## Masalah yang Ditemukan

Berdasarkan analisis, ada beberapa masalah utama dengan sistem video:

1. **Video Provider Salah Klasifikasi**: Banyak video yang seharusnya self-hosted malah ter-mark sebagai "EXTERNAL"
2. **HLS Extraction Gagal**: Video external membutuhkan ekstraksi HLS yang sering gagal
3. **Storage Configuration Kosong**: Video self-hosted tidak memiliki konfigurasi storage yang lengkap
4. **Playback Failure**: Kombinasi masalah di atas menyebabkan video tidak bisa diputar

## Tools yang Telah Dibuat

### 1. Analyze Video Storage (`php artisan videos:analyze-storage`)
Tool untuk menganalisis konfigurasi dan distribusi video storage.

**Fitur:**
- Cek konfigurasi storage driver
- Analisis distribusi video berdasarkan provider
- Identifikasi masalah dalam database
- Test konektivitas storage

**Penggunaan:**
```bash
# Analisis dasar
php artisan videos:analyze-storage

# Dengan test konektivitas
php artisan videos:analyze-storage --check-connectivity

# Analisis dengan sample lebih banyak
php artisan videos:analyze-storage --sample=20
```

### 2. Fix Video Providers (`php artisan videos:fix-providers`)
Tool untuk memperbaiki provider assignment dan konfigurasi storage.

**Fitur:**
- Perbaiki video yang seharusnya self-hosted
- Bersihkan video dengan storage info tidak lengkap
- Update provider berdasarkan embed URL

**Penggunaan:**
```bash
# Dry run (lihat apa yang akan diubah tanpa mengubah)
php artisan videos:fix-providers --dry-run

# Jalankan perbaikan sebenarnya
php artisan videos:fix-providers

# Batch processing
php artisan videos:fix-providers --batch=200
```

### 3. Migrate External Videos (`php artisan videos:migrate-external`)
Tool untuk migrasi video external yang bermasalah ke self-hosted.

**Fitur:**
- Migrasi video dengan extraction failure
- Konversi ke self-hosted provider
- Generate struktur path

**Penggunaan:**
```bash
# Dry run untuk migrasi
php artisan videos:migrate-external --dry-run

# Migrasi provider tertentu
php artisan videos:migrate-external --provider=dood --limit=20

# Migrasi tanpa konfirmasi
php artisan videos:migrate-external --force
```

## Langkah-Langkah Perbaikan

### Step 1: Analisis Kondisi Saat Ini
```bash
cd /home2/rasamemek/public_html/web2026/player2026
php artisan videos:analyze-storage --check-connectivity
```

### Step 2: Perbaiki Provider Assignment (Dry Run)
```bash
php artisan videos:fix-providers --dry-run
```
Periksa output untuk memahami perubahan yang akan dilakukan.

### Step 3: Jalankan Perbaikan
```bash
php artisan videos:fix-providers
```

### Step 4: Verifikasi Hasil
```bash
php artisan videos:analyze-storage
```

### Step 5: (Opsional) Migrasi Video External
Jika masih banyak video external dengan masalah:
```bash
# Lihat kandidat migrasi
php artisan videos:migrate-external --dry-run --limit=100

# Migrasi bertahap
php artisan videos:migrate-external --limit=50
```

## Konfigurasi Storage yang Dibutuhkan

Pastikan file `.env` memiliki konfigurasi berikut:

```env
# Video Storage Configuration
VIDEO_STORAGE_DRIVER=digitaloceanspaces

# DigitalOcean Spaces Configuration
VIDEO_DO_DISK=video-digitalocean
VIDEO_DO_ACCESS_KEY=your_access_key
VIDEO_DO_SECRET_KEY=your_secret_key
VIDEO_DO_BUCKET=your_bucket_name
VIDEO_DO_REGION=sgp1
VIDEO_DO_ENDPOINT=https://sgp1.digitaloceanspaces.com
```

## Verifikasi Storage Drivers

Cek di `config/filesystems.php` bahwa disk sudah terkonfigurasi:

```php
'video-digitalocean' => [
    'driver' => 's3',
    'key' => env('VIDEO_DO_ACCESS_KEY'),
    'secret' => env('VIDEO_DO_SECRET_KEY'),
    'region' => env('VIDEO_DO_REGION', 'sgp1'),
    'bucket' => env('VIDEO_DO_BUCKET'),
    'endpoint' => env('VIDEO_DO_ENDPOINT'),
    'use_path_style_endpoint' => false,
],
```

## Monitoring dan Maintenance

### Cek Status Berkala
```bash
# Cek distribusi provider
php artisan videos:analyze-storage

# Cek video dengan masalah
php artisan db:table videos --where="extract_failed=1" --count
```

### Log Monitoring
Monitor error message di video records:
```sql
SELECT provider, COUNT(*) as count, 
       SUM(CASE WHEN extract_failed = 1 THEN 1 ELSE 0 END) as failed
FROM videos 
GROUP BY provider;
```

## FAQ

### Q: Mengapa banyak video external?
A: Kemungkinan karena:
- Import data dari sistem lama
- Upload yang tidak proper
- Konfigurasi storage belum lengkap saat upload

### Q: Aman tidak menjalankan fix-providers?
A: Ya, selalu gunakan `--dry-run` dulu untuk melihat perubahan sebelum apply.

### Q: Video masih tidak bisa play setelah fix?
A: Kemungkinan:
- File video yang sebenarnya belum ada di storage
- Konfigurasi storage credentials salah
- Asset path tidak sesuai dengan file location

### Q: Perlu upload ulang video setelah migrasi?
A: Ya, untuk video yang di-migrate dari external ke self-hosted, Anda perlu upload file video ke storage.

## Support

Jika ada masalah:
1. Jalankan `videos:analyze-storage --check-connectivity` untuk diagnosa
2. Periksa log Laravel untuk error detail
3. Pastikan credentials storage sudah benar