# دليل تثبيت واستخدام نظام معالجة الفيديو HLS

## المتطلبات

### 1. تثبيت FFmpeg

#### على macOS:
```bash
# باستخدام Homebrew
brew install ffmpeg
```

#### على Linux (Ubuntu/Debian):
```bash
sudo apt update
sudo apt install ffmpeg
```

#### على Linux (CentOS/RHEL):
```bash
sudo yum install epel-release
sudo yum install ffmpeg
```

#### التحقق من التثبيت:
```bash
ffmpeg -version
which ffmpeg
```

---

## الإعداد

### 1. تحديث مسار FFmpeg في السكريبت

افتح ملف `process_videos.php` وعدّل السطر:
```php
$ffmpeg_path = '/opt/homebrew/bin/ffmpeg'; // عدّل هذا المسار
```

**للحصول على المسار الصحيح**:
```bash
which ffmpeg
```

### 2. منح صلاحيات التنفيذ:
```bash
chmod +x process_videos.php
```

### 3. التأكد من صلاحيات المجلدات:
```bash
chmod 755 upload_media/
```

---

## الاستخدام

### تشغيل السكريبت يدوياً:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/Rassd26/backend/api
php process_videos.php
```

### تشغيل تلقائي (Cron Job):

افتح crontab:
```bash
crontab -e
```

أضف السطر التالي (تشغيل كل ساعة):
```
0 * * * * cd /Applications/XAMPP/xamppfiles/htdocs/Rassd26/backend/api && php process_videos.php >> video_processing.log 2>&1
```

أو كل 30 دقيقة:
```
*/30 * * * * cd /Applications/XAMPP/xamppfiles/htdocs/Rassd26/backend/api && php process_videos.php >> video_processing.log 2>&1
```

---

## كيف يعمل النظام؟

### 1. اكتشاف الفيديوهات
السكريبت يبحث عن الفيديوهات التي:
- `video_url IS NOT NULL`
- `video_processing = 0` (لم تتم معالجتها)

### 2. المعالجة
لكل فيديو:
1. تحديث `video_processing = 1` (جاري المعالجة)
2. إنشاء مجلد `{post_id}_hls/`
3. تحويل الفيديو إلى 4 جودات (360p, 480p, 720p, 1080p)
4. إنشاء master playlist
5. تحديث `video_processing = 2` (تمت المعالجة)

### 3. الهيكل الناتج
```
upload_media/
├── 2020965931523158098.mp4           ← الفيديو الأصلي
└── 2020965931523158098_hls/          ← HLS
    ├── master.m3u8                   ← القائمة الرئيسية
    ├── 360p/
    │   ├── playlist.m3u8
    │   └── segment_*.ts
    ├── 480p/
    ├── 720p/
    └── 1080p/
```

---

## استخدام الفيديو في الموقع

### HTML5 Video Player مع hls.js

```html
<!DOCTYPE html>
<html>
<head>
    <title>HLS Video Player</title>
</head>
<body>
    <video id="video" controls width="100%" height="auto"></video>

    <!-- مكتبة hls.js -->
    <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
    
    <script>
        var video = document.getElementById('video');
        var videoSrc = 'upload_media/2020965931523158098_hls/master.m3u8';
        
        // التحقق من الدعم الأصلي لـ HLS (Safari)
        if (video.canPlayType('application/vnd.apple.mpegurl')) {
            video.src = videoSrc;
        } 
        // استخدام hls.js للمتصفحات الأخرى
        else if (Hls.isSupported()) {
            var hls = new Hls({
                // إعدادات اختيارية
                debug: false,
                enableWorker: true,
                lowLatencyMode: false,
            });
            
            hls.loadSource(videoSrc);
            hls.attachMedia(video);
            
            hls.on(Hls.Events.MANIFEST_PARSED, function() {
                console.log('HLS manifest loaded, found ' + hls.levels.length + ' quality levels');
            });
            
            hls.on(Hls.Events.ERROR, function(event, data) {
                console.error('HLS error:', data);
            });
        }
        // المتصفح لا يدعم HLS
        else {
            console.error('This browser does not support HLS');
            // يمكن عرض الفيديو الأصلي كبديل
            video.src = 'upload_media/2020965931523158098.mp4';
        }
    </script>
</body>
</html>
```

---

## المراقبة والصيانة

### عرض السجلات:
```bash
tail -f video_processing.log
```

### التحقق من حالة المعالجة:
```sql
SELECT 
    id, 
    post_id, 
    video_url, 
    video_processing,
    CASE video_processing
        WHEN 0 THEN 'لم تتم'
        WHEN 1 THEN 'جاري المعالجة'
        WHEN 2 THEN 'تمت المعالجة'
    END as status
FROM social_media_content 
WHERE video_url IS NOT NULL;
```

### إعادة معالجة فيديو:
```sql
UPDATE social_media_content 
SET video_processing = 0 
WHERE post_id = '2020965931523158098';
```

---

## استكشاف الأخطاء

### المشكلة: FFmpeg not found
**الحل**: تثبيت FFmpeg وتحديث المسار في السكريبت

### المشكلة: Permission denied
**الحل**: 
```bash
chmod 755 upload_media/
chmod +x process_videos.php
```

### المشكلة: الفيديو لا يعمل في المتصفح
**الحل**: 
- تأكد من استخدام hls.js
- تحقق من مسار master.m3u8
- افتح console في المتصفح لرؤية الأخطاء

### المشكلة: المعالجة بطيئة جداً
**الحل**: 
- تقليل عدد الجودات
- استخدام `-preset fast` بدلاً من `-preset medium`
- معالجة فيديو واحد في كل مرة

---

## الأداء والتحسين

### حذف الفيديو الأصلي (اختياري)
بعد نجاح المعالجة، يمكن حذف الفيديو الأصلي لتوفير المساحة:

```php
// في process_videos.php بعد السطر:
// updateProcessingStatus($db, $id, 2);

// إضافة:
if (file_exists($inputFile)) {
    unlink($inputFile);
    logMessage("Original video deleted: $inputFile");
}
```

### تقليل استهلاك CPU
استخدام `nice` لتقليل الأولوية:
```bash
nice -n 19 php process_videos.php
```

---

## التوافق

✅ **المتصفحات المدعومة**:
- Safari (iOS & macOS) - دعم أصلي
- Chrome/Edge - عبر hls.js
- Firefox - عبر hls.js
- Opera - عبر hls.js

✅ **الأجهزة المدعومة**:
- iPhone/iPad
- Android
- Windows
- macOS
- Linux

---

**آخر تحديث**: 2026-02-10
