كمهمة ، تقرر إنشاء تطبيق بسيط يسمح بإجراء مكالمات صوتية ومرئية بين جهازين (في الوقت الحالي) ثابت أو جهاز محمول في شبكة محلية دون الحاجة إلى الاتصال بالإنترنت. يجب أن يكون التثبيت والتكوين الأولي لمثل هذا التطبيق بسيطًا بما يكفي بحيث يمكن لأي تطبيق متقدم التعامل معه دون أي مشاكل ويوضح للمستخدمين كيفية إجراء المكالمات ، وإذا كان لديه المهارات المناسبة ، فيمكنه إجراء تحسينات طفيفة من حيث التصميم والقدرات. يجب أن يكون العميل أي جهاز مزود بأجهزة إدخال وإخراج للوسائط المتعددة ويسمح لك بتشغيل متصفح مناسب (Firefox أو Chrome - الاختبار في مايو ، على ما يبدو ، الإصدارات).
كيف يتم ذلك
كما تعلم ، تقترح تقنية WebRTC للاتصال بين مشتركين استخدام كائن من نوع RTCPeerConnection ، وتتمثل المهمة الرئيسية للمطور في تنظيم تبادل المعلومات النصية (عرض SDP ، SDP-answer ، مرشح ICE) بين المتصل والمستدعي. بعبارة أخرى ، يحتاج المطور أولاً إلى إنشاء محادثة نصية باستخدام واجهة برمجة تطبيقات لمتصفح JavaScript ثم إرفاق جزء الوسائط المتعددة به - أحداث RTCPeerConnection وطرق نقل ومعالجة استقبال البيانات.
يبقى اختيار تقنيات التنفيذ وواجهة برمجة تطبيقات الدردشة النصية مع المطور. يفضل الكثير (وخاصة Mozilla في مثالهم الرسمي لـ RTCPeerConnection) استخدام واجهة برمجة تطبيقات WebSocket والخادم المقابل - على سبيل المثال ، على Node.JS. ولكن ، مع الأخذ في الاعتبار مهمتنا لجعلها بسيطة قدر الإمكان للنشر ، قررت أن أبدأ بعدم المبالغة في تعقيد تطبيق الخادم ، أكثر من ذلك ، لتسليم الصفحات والنصوص إلى جهاز العميل ، كانت هناك حاجة إلى خادم ويب إضافي. لذلك ، قررت API استخدام xmlHttpRequest مع مكالمات العميل الدورية إلى خادم الويب نفسه. لا أستطيع أن أقول إن هذا يعمل بشكل مثالي من حيث استهلاك الموارد (والبطارية) لجهاز العميل وغياب الفرامل ، ولكنه يعمل تمامًا إذا تم أخذ بعض الفروق الدقيقة في الاعتبار عند التطوير. يمكن،في بعض الإصدارات التالية ، سأضيف خادم WebSocket وأعيد تصميم واجهة برمجة التطبيقات وفقًا لذلك ، ولكن ليس كلها مرة واحدة.
تقرر إنشاء جزء الخادم على Lazarus for Windows ؛ يتم توفير إمكانات الشبكات من خلال حزمة Synapse. من بعض النواحي ، ربما يكون هذا انحرافًا ، وكان عليّ أن أبتعد بجدية وأن أحصل على بعض المطبات لكي أجعل كل شيء يعمل على النحو المنشود. لكن exe واحد ، واثنان dll (مكتبات OpenSSL) ، وملفات لشهادة SSL موقعة ذاتيًا ومفتاح لها ، وبعض ملفات التكوين (بالإضافة إلى ثابتة) تسمح لك بعدم الإزعاج كثيرًا بمستوى التكنولوجيا للخادم وطريقة تشغيل التطبيق. لقد اختبرت الإصدار الأول من هذا الخادم في إصدار 32 بت حتى على جهاز Asus Eee PC 900 لعام 2009 تحت Windows XP ، على الرغم من أنه لم يكن خاليًا من الغش في شكل استبدال حديث لمحرك أقراص SSD عادي بطيء للغاية بآخر أكثر حداثة وكثافة. هذا من حيث الأداء. و "تثبيت" الخادم هو تفريغ أرشيف zip الذي تم تنزيله في أي مجلد مناسب ،تحرير ملف JSON لتكوين حسابات المستخدمين وتشغيل ملف exe للبرنامج (يوجد أيضًا زر في النافذة ، ولكن يمكنك تحديد معلمة في سطر الأوامر لبدء خادم الويب على الفور). بطريقة أو بأخرى ، أفكر في جزء خادم أكثر جدية ، لأن لدي مثل هذه الخبرة. كل شيء له وقته.
بالإضافة إلى التنظيم الفعلي لواجهة برمجة التطبيقات ، يقدم خادمنا ملفات ثابتة للمتصفحات (صفحات الويب لتسجيل الدخول والدردشة ، والأنماط ، والصور ، والنصوص ، ونغمات الرنين). بشكل عام ، حاولت الاستغناء عن مكتبات الطرف الثالث قدر الإمكان ، ولكن نظرًا لحقيقة أن تصميمي وتخطيط html ليسا رائعين جدًا ، قررت استخدام jQuery.UI ، وبالتالي ، jQuery ، الذي يرسله خادم الويب أيضًا على أنه ثابت. جميع الملفات الثابتة موجودة في مجلد فرعي منفصل لمجلد البرنامج ؛ بالطبع ، يمكن مشاهدتهم وحتى تغييرهم إذا رغبت في ذلك وبالمهارات المناسبة. في JavaScript ، يتم التعليق على الكود ، ويمكنك التعلم منه إذا لزم الأمر.
كيفية تنظيم الاتصال
لتنظيم الاتصال ، فإن الشيء الرئيسي هو تحديد ودمج أجهزة العميل (أجهزة الكمبيوتر ، أجهزة الكمبيوتر المحمولة ، الهواتف الذكية ، الأجهزة اللوحية) وجهاز يعمل بنظام Windows مع "خادم" (يمكن أن يعمل أيضًا كعميل) في شبكة مشتركة. من أجهزة العملاء ، اختبرت العديد من الهواتف الذكية غير المكلفة التي تم إصدارها في السنوات القليلة الماضية على نظام Android بدءًا من الإصدار 7 ، بالإضافة إلى جهاز كمبيوتر وكمبيوتر محمول يعملان بنظام التشغيل Windows 10 ، بما في ذلك باستخدام كاميرتي ويب متصلتين ؛ لقد أداؤوا بشكل جيد. من أجل المتعة ، قمت حتى باختبار الإصدار الأول على Orange Pi One مع Lubuntu (أو Kubuntu ، لا أتذكره فورًا) من الشركة المصنعة. والمثير للدهشة ، أنها نجحت ، على الرغم من تباطؤ الفيديو ، وفتح صفحة الدردشة بدون أي وقت على الإطلاق (لا أريد حتى التحدث عن تحميل النظام وفتح المتصفح).
يتم تثبيت خادمنا على الآلة الكاتبة "الخادم" بالطريقة المذكورة أعلاه ويتم تكوين حسابات المستخدمين. يحتاج كل مستخدم إلى تسجيل الدخول بكلمة مرور.
كل شيء يعمل هكذا. يقوم المستخدمون بتسجيل الدخول إلى الآلة الكاتبة "الخادم" باستخدام متصفح عبر بروتوكول https ، باستخدام عنوان IP أو اسم المجال. هناك يقومون بإدخال اسم المستخدم وكلمة المرور الخاصة بهم والذهاب إلى صفحة الدردشة مع قائمة جهات الاتصال. عند النقر فوق جهة اتصال ، يتم فتح نافذة حوار تحتوي على محفوظات الرسائل النصية (بالمناسبة ، يقوم الخادم بتخزينها فقط في ذاكرة الوصول العشوائي ، ولا يمكن تخزينها بعد في ملف) ، وحقل للدردشة ونموذج مكالمة صوتية ومرئية مع مربعات اختيار لاختيار الصوت و (أو) الفيديو. لإجراء مكالمة فيديو ، يقوم المستخدم بتحديد مربعات الاختيار المناسبة ، ويضغط على زر الاتصال ويؤكد الإذن للمتصفح. يبدأ المشترك الذي تم الاتصال به بإصدار نغمة رنين ويفتح نموذج استجابة بنفس العلامات. بعد النقر فوق زر الإجابة ، سيطلب المتصفح أيضًا الإذن للوصول إلى أجهزة الوسائط المتعددة. ثم تفتح نافذة الاتصال.
لا أستطيع أن أقول إن لدي الكثير من الخبرة مع برامج مؤتمرات الفيديو ، واستشارات الفيديو ، وما إلى ذلك ، ولكن ، على سبيل المثال ، في Google Hangouts على جهاز كمبيوتر (كما هو الحال في أجهزة الجوال ، لا أعرف) لم أجد فرصة لتحويل حبيبي إلى وضع ملء الشاشة ، والتي قد تكون مطلوبة نظريًا في المشاورات عن بُعد عندما تحتاج إلى رؤية ما تعرضه جيدًا لمحاورك (على سبيل المثال ، من خلال الكاميرا الخلفية لهاتفك الذكي). في هذه الدردشة ، في حوار المكالمة ، قررت عمل علامتي تبويب مع الفيديو - المحاور والمستخدم نفسه. من الإصدار الحالي في علامة تبويب المستخدم ، بالإضافة إلى الفيديو نفسه ، هناك مجالات لاختيار الكاميرا والميكروفون ؛ يمكنك تغيير قيمهم بسرعة أثناء المحادثة. ربما سيكون مفيدًا لشخص ما.
الآن سوف أصف بإيجاز الأقماع المليئة بالتنمية ؛ ربما سيساعد شخصًا ما أثناء تطوير حلوله وتصحيحها.
الميزات الحديثة لعمل وتنفيذ WebRTC والعمل بشكل عام مع الوسائط المتعددة في JavaScript
هنا باختصار يمكن العثور على التفاصيل في التعليقات في ملف جافا سكريبت static / js / videoChat.js
- Chrome بالتأكيد ، بالإضافة إلى ربما ، المتصفحات الأخرى تسمح لك أيضًا بالعمل مع getUserMedia فقط على المواقع التي يمكن الوصول إليها عبر HTTPS
- لا يمكن الحصول على قائمة أجهزة إدخال الصوت والفيديو إلا بعد نجاح مكالمة getUserMedia
- لا يمكن البدء التلقائي في تشغيل الصوت باستخدام JavaScript (عبر طريقة play () لفيديو html أو عنصر الصوت) إلا بعد أن يظهر المستخدم نشاطًا على الموقع - على سبيل المثال ، النقر على بعض عناصر التحكم.
- promise setLocalDescription , offer. RTCPeerConnection ICE-, .
- « » getUserMedia RTCPeerConnection. , , .
- تشير العديد من الأوصاف الخاصة بالأجهزة المحمولة إلى خاصية وضع الوجه لتحديد الكاميرات الأمامية أو الخلفية. في الواقع ، لا أعرف كيف في الأجهزة القديمة ، ولكن في هذه الدردشة على الهواتف الذكية التي تم اختبارها ، يعمل التبديل حتى بدون استخدام هذه الخاصية. ولكن مع مراعاة البند 5 بدقة.
القائمة على الأرجح ليست شاملة. أعتقد أن الكثير سيظهر في سياق المزيد من التطوير. إذا كان شخص ما يعرف كيفية الالتفاف على القيود ، وبناءً عليه ، قم بتبسيط البرنامج أو العمل معه ، يرجى الكتابة في التعليقات.
مطور تطبيقات شبكة Lazarus
يدعم Synapse حاليًا مكتبات OpenSSL 1.0.x فقط ؛ في 1.1 تم تنفيذ الكثير من الأشياء بشكل مختلف بالفعل ، والبعض الآخر حتى أسماء المكتبات. بالإضافة إلى ذلك ، لا يكفي مجرد وضع dlls في مجلد البرنامج. نحتاج أيضًا إلى ملف تكوين (openssl.cnf) ، المسار الذي يتم تعيينه من خلال متغير البيئة OPENSSL_CONF.
أين يمكنني التنزيل
توزيعات البرنامج لنظامي Win32 و Win64 وكود مصدر جانب الخادم على Lazarus متوفرة على صفحة البرنامج على الرابط www.lubezniy.ru/soft/videochat
PS: بالمناسبة ، هل يعرف أي شخص كيف يمكنك استخدام Lazarus لأتمتة البناء من نفس المصادر اثنين من إكس مختلفة - ل Win32 و Win64؟ برنامج التحويل البرمجي المتقاطع من Win64 إلى Win32 قيد التشغيل ، لكن تغيير الخيارات في المشروع في كل مرة غير صحيح.
PPS: من جربها ، يرجى مشاركة انطباعاتك في التعليقات.