البث في الوقت الحقيقي
🤖AI-generated documentation☐ curatedAI Generated
About content generation types
(e.g., docs generated from codebase analysis)
(e.g., livestream → blog post, meeting notes → docs)
(e.g., hand-written tutorial)
دلالات الكاميرا الواحدة لأنظمة الكاميرات المتعددة
هدف تصميمي رئيسي لواجهة برمجة تطبيقات SkellyCam هو أن مجموعة الكاميرات المتعددة تتصرف ككاميرا واحدة. بدلاً من إدارة N تيارات كاميرا مستقلة بمعدلات إطارات مستقلة ودورات حياة اتصال مستقلة، تتصل بنقطة نهاية WebSocket واحدة وتستقبل تياراً واحداً من حمولات الإطارات المتعددة المتزامنة.
كل حمولة تحتوي على صورة واحدة بالضبط لكل كاميرا لكل حدث إطار، يتم تسليمها بمعدل إطارات ثابت. لا يحتاج كود تطبيقك لربط الإطارات عبر الكاميرات، أو التعامل مع الانحراف، أو إدارة اتصالات لكل كاميرا. فقط عالج كل حمولة مع العلم أنها تمثل لحظة واحدة متزامنة عبر جميع الكاميرات.
بروتوكول WebSocket
يستخدم SkellyCam بروتوكول WebSocket ثنائي مضغوط لبث الإطارات:
- ضغط JPEG — يتم ضغط إطار كل كاميرا بصيغة JPEG (جودة 80 افتراضياً) ويُصغّر اختيارياً ليتناسب مع أبعاد عرض العميل.
- التعبئة الثنائية — جميع الإطارات المضغوطة لحدث إطار متعدد واحد تُعبأ في رسالة WebSocket ثنائية واحدة، مع بيانات وصفية لكل كاميرا (معرف الكاميرا، الدقة، الطابع الزمني).
- إدارة الضغط الخلفي — إذا لم يتمكن العميل من المتابعة، يسقط الخادم الإطارات بدلاً من التخزين المؤقت إلى أجل غير مسمى. هذا يمنع تراكم الذاكرة ويحافظ على استجابة التيار.
يحمل نفس اتصال WebSocket أيضاً رسائل JSON للسجلات وتحديثات الحالة وإحصائيات معدل الإطارات وأوامر التحكم.
للحصول على تفاصيل البروتوكول الكاملة، راجع مرجع بروتوكول WebSocket.
عرض الواجهة الأمامية
تعالج واجهة React/Electron الأمامية الإطارات الواردة عبر خط أنابيب محسن للأداء:
- تحليل ثنائي — يتم تحليل الحمولة الثنائية لاستخراج كائنات JPEG لكل كاميرا.
- إنشاء ImageBitmap — يتم فك تشفير كل كائن JPEG إلى
ImageBitmap، الذي يمكن نقله إلى خيط عامل دون نسخ. - عرض OffscreenCanvas — يتم عرض بث كل كاميرا على
OffscreenCanvasفي Web Worker مخصص، مما يحافظ على حرية الخيط الرئيسي لتفاعلات واجهة المستخدم.
تدعم هذه البنية العديد من بثوث الكاميرات المتزامنة دون إسقاط إطارات في واجهة المستخدم.
ما التالي
التنفيذ الحالي يستخدم WebSocket عبر TCP، وهو موثوق لكنه يضيف تأخيراً من ضمانات ترتيب TCP. لسيناريوهات الشبكة المحلية عالية الإنتاجية، سيقلل نقل UDP التأخير من خلال السماح بإسقاط الإطارات على مستوى النقل بدلاً من مستوى التطبيق. راجع عناصر خارطة الطريق أعلاه للتحسينات المخطط لها في النقل والعميل.