<?php <?php class StreamEncoder { // دالة لإطلاق بث القناة الجديدة public function startChannel($channelName, $videoInput, $audioInput, $udpIP, $udpPort) { $ffmpegCmd = "ffmpeg"; // 1. مدخلات الكابتشر (V4L2) $inputs = "-f v4l2 -i $videoInput -f alsa -i $audioInput"; // 2. فلاتر معالجة الصورة في الوقت الفعلي (تعديل الإضاءة والتشبع) $filters = "-vf \"eq=brightness=0.05:saturation=1.2\""; // 3. التشفير العتادي القوي باستخدام كارت Nvidia مع تحديد معدل البت $videoEncoding = "-c:v h264_nvenc -preset p4 -profile:v high -b:v 3000k -maxrate 3500k -bufsize 6000k"; $audioEncoding = "-c:a aac -b:a 128k -ar 48000"; // 4. الإخراج وتوجيه حزم UDP للشبكة بحجم ثابت مناسب للبث $output = "-f mpegts \"udp://$udpIP:$udpPort?pkt_size=1316\""; // تجميع السطر النهائي للأمر مع تفعيل التسريع العتادي (hwaccel) $fullCommand = "$ffmpegCmd -hwaccel cuda $inputs $filters $videoEncoding $audioEncoding $output"; // تنفيذ الأمر في الخلفية (Background Process) للحفاظ على استمرار عمل الواجهة $pid = $this->executeInBackground($fullCommand); return $pid; } // دالة تشغيل الأوامر في الخلفية واستخراج رقم العملية (PID) لمراقبتها private function executeInBackground($command) { $output = array(); // هذا السطر مخصص لبيئة لينكس لتشغيل العملية وفصلها عن مسار الواجهة exec(sprintf("%s > /dev/null 2>&1 & echo $!", $command), $output); return $output[0]; // إرجاع الـ PID } } // تجربة إنشاء وتشغيل قناة $encoder = new StreamEncoder(); $pid = $encoder->startChannel( "Channel_Movie_01", "/dev/video0", // مسار جهاز الفيديو "hw:0", // مسار جهاز الصوت "239.255.12.42", // عنوان البث (Multicast IP) "1234" // منفذ البث (Port) ); echo "تم إطلاق القناة بنجاح تحت عملية رقم: " . $pid; ?>
You have javascript disabled. You will not be able to edit any code.