انتقل إلى المحتوى الرئيسي

البث في الوقت الحقيقي

🤖AI-generated documentation curatedAI Generated
This page was drafted by an AI assistant and may contain inaccuracies.
About content generation types
🤖
AI GeneratedPage drafted entirely by AI from codebase or prompt instructions.
(e.g., docs generated from codebase analysis)
← this page
✋→🤖
AI TransformattedHuman provided raw material; AI restructured it into a different format.
(e.g., livestream → blog post, meeting notes → docs)
Human GeneratedPage written entirely by a human author.
(e.g., hand-written tutorial)
More info about content generation types ↗
📡
A compact binary WebSocket protocol streams multi-camera frames to the React/Electron frontend with built-in backpressure management. The API treats a multi-camera group with the same expectations as a singular camera — a consistent frame rate delivering one image per camera per frame.

دلالات الكاميرا الواحدة لأنظمة الكاميرات المتعددة

هدف تصميمي رئيسي لواجهة برمجة تطبيقات SkellyCam هو أن مجموعة الكاميرات المتعددة تتصرف ككاميرا واحدة. بدلاً من إدارة N تيارات كاميرا مستقلة بمعدلات إطارات مستقلة ودورات حياة اتصال مستقلة، تتصل بنقطة نهاية WebSocket واحدة وتستقبل تياراً واحداً من حمولات الإطارات المتعددة المتزامنة.

كل حمولة تحتوي على صورة واحدة بالضبط لكل كاميرا لكل حدث إطار، يتم تسليمها بمعدل إطارات ثابت. لا يحتاج كود تطبيقك لربط الإطارات عبر الكاميرات، أو التعامل مع الانحراف، أو إدارة اتصالات لكل كاميرا. فقط عالج كل حمولة مع العلم أنها تمثل لحظة واحدة متزامنة عبر جميع الكاميرات.

بروتوكول WebSocket

يستخدم SkellyCam بروتوكول WebSocket ثنائي مضغوط لبث الإطارات:

  1. ضغط JPEG — يتم ضغط إطار كل كاميرا بصيغة JPEG (جودة 80 افتراضياً) ويُصغّر اختيارياً ليتناسب مع أبعاد عرض العميل.
  2. التعبئة الثنائية — جميع الإطارات المضغوطة لحدث إطار متعدد واحد تُعبأ في رسالة WebSocket ثنائية واحدة، مع بيانات وصفية لكل كاميرا (معرف الكاميرا، الدقة، الطابع الزمني).
  3. إدارة الضغط الخلفي — إذا لم يتمكن العميل من المتابعة، يسقط الخادم الإطارات بدلاً من التخزين المؤقت إلى أجل غير مسمى. هذا يمنع تراكم الذاكرة ويحافظ على استجابة التيار.

يحمل نفس اتصال WebSocket أيضاً رسائل JSON للسجلات وتحديثات الحالة وإحصائيات معدل الإطارات وأوامر التحكم.

للحصول على تفاصيل البروتوكول الكاملة، راجع مرجع بروتوكول WebSocket.

عرض الواجهة الأمامية

تعالج واجهة React/Electron الأمامية الإطارات الواردة عبر خط أنابيب محسن للأداء:

  1. تحليل ثنائي — يتم تحليل الحمولة الثنائية لاستخراج كائنات JPEG لكل كاميرا.
  2. إنشاء ImageBitmap — يتم فك تشفير كل كائن JPEG إلى ImageBitmap، الذي يمكن نقله إلى خيط عامل دون نسخ.
  3. عرض OffscreenCanvas — يتم عرض بث كل كاميرا على OffscreenCanvas في Web Worker مخصص، مما يحافظ على حرية الخيط الرئيسي لتفاعلات واجهة المستخدم.

تدعم هذه البنية العديد من بثوث الكاميرات المتزامنة دون إسقاط إطارات في واجهة المستخدم.

ما التالي

التنفيذ الحالي يستخدم WebSocket عبر TCP، وهو موثوق لكنه يضيف تأخيراً من ضمانات ترتيب TCP. لسيناريوهات الشبكة المحلية عالية الإنتاجية، سيقلل نقل UDP التأخير من خلال السماح بإسقاط الإطارات على مستوى النقل بدلاً من مستوى التطبيق. راجع عناصر خارطة الطريق أعلاه للتحسينات المخطط لها في النقل والعميل.