السلام عليكم ورحمه الله وبركاته ،
قبل فتره بدأت باستخدام JMF وبدئت في مشروع المراقبه باستخدام الكاميرا وهو مشابه للمشروع الذي قام به أخ فادي عبد القادر في قسم برمجه الشبكات -هنا- مع أني لم أشاهد ذلك البرنامج (لكن نفس الفكره) .
السيناريو بسيط :
Client - Server Model
المعالجه (المراقبه والتحقق) من طرف العميل Heavy Client .
يقوم العميل بارسال العرض مباشره الى الخادم Video Streaming عن طريق برتوكول RTP .
في حال أكتشف العميل بأن هناك أختراق سوف يقوم بارسال تنبيه الى الخادم-والذي بدوره يقوم بتشغيل الأنذار- اضافه الى أن العميل يقوم بحفظ الصور التي تكون في الوضع غير الأمن (في ملف بالقرص سي) .
يوجد ملف Log لدى السيرفر يقوم بحفظ جميع الأوقات التي حصل فيها الأختراق .
أليه العمل :
يقوم العميل بعد الأتصال بالخادم وتشغيل الكاميرا ونقل الـ Video اليه (عن طريق عمل نسخه Clone من المشهد وارسال النسخه) ، في أنتظار العميل بأن يقوم بحفظ الصوره الأمنه حتى يبدأ عمليات المقارنه ، وبعدها عندما يضغط على زر حفظ الصوره الحاليه (ويعتبرها الصوره الأمنه ، ولا يمكن تغييرها الا بعد الخروج من البرنامج) ، هنا يبدأ Timer بأخذ صوره من العرض كل ثانيه ( عمل FrameGrabbingللمشهد ) ويقارنها بالصوره الأمنه ، في حال وجد أختلاف أرسل تنبيه للخادم (ويقوم بتغيير بعض من الـ Label وهي تعتبر كشريط لحاله البرنامج State) وبعدها يستقبل الخادم التنبيه ويغير في شريط الحاله الخاص به أيضا ويقوم بتشغيل الأنذار ... الى أن يرجع الوضع الى حالته الأمنه وهنا سوف يتوقف الأنذار (يمكن للخادم أن يقوم بتشغيله وايقافه بشكل يدوي أيضا) .
خوارزميه مقارنه الصورتين كالتالي :
تنظر الى حجم الصورتين فاذا اختلافا فذلك يدل على أن هناك أختلاف وبالتالي أختراق ..
في حال كان الحجم متساوي ، سوف أقارن كل بسكل في صوره الأولى مع كل بكسل في الأخرى :
و في البرنامج قمت بعمل ثلاث مستويات للحمايه (عالي ، متوسط ، ضعيف) ، وهنا أقصد مستوى سماحيه الأختلاف في عدد البكسلات ، أي في المستوى العالى لن أسمح بأكثر من ثلث (حجم الصوره على 3) أختلاف بين البكسلات في الصورتين ، فاذا كان أكثر فهذا يدل على وجود أختراق ، والا فالحاله أمنه .
أما اذا كانت درجه الحمايه متوسطه أو ضعيفه ، فلن أسمح بأكثر من (حجم الصوره على 4 ) أختلاف بين البكسلات في الصورتين . بالأضافه الى أنه في حاله كان هناك أختلاف بين البكسلين لن أراعى هذا الأختلاف الا اذا أكبر من 5 في المتوسط ، أو أكبر من 10 في المستوى الضعيف ..
ربما تبدوا الخوازميه قبيحه وسيئه للغايه ، لكن هذا الى أستطعت كتابته ! بالأضافه الى أنها تعمل بشكل جيد لدى ، فمستوى الحمايه المتوسط يعمل بشكل جيد جدا ، أما العالي فلا يعمل والسبب أن هناك أختلاف بين كل لقطه وأخرى وحتى إن كانت لنفس المشهد (يرجع السبب لأن الكاميرا التي استخدمتها سيئه جدا ، وسوف تلاحظ ذلك في الصور التاليه ) لذلك في المستوى العالي كل ثانيه سوف يكون هناك أختراق
هذه صور الواجهات في البرنامج :
أولا شغل الملف Server والذي يقوم بتشغيل الملف LoggienScreen وهنا سوف يطلب منك
اسم المستخدم : root ، كلمه المرور : wajdy .
بعدها سوف تظهر شاشه الخادم ان كانت المعلومات صحيحه :
شريط الحاله باللون الأسفل يدل على حاله النظام (أمن ، غير أمن ، غير معروف في حال لم يكن هناك أتصال مع العميل) ، حاله الخادم (يعمل ، لا يعمل في حال لم نضغط على زر بدء عمليه المراقبه حتى يبدأ عمليه الـ Listen لأي كلاينت يريد الأتصال ) ، أسم العميل (غير معروف في حال لم يكن هناك اتصال ، غير ذلك سوف يظهر اسم العميل الذي اتصل هنا ) .
اعدادات الخادم : سوف ندخل أي أسم للمسؤول (مثلا Wajdy) ، ورقم البورت ودائما ما أحب أستخدام البورت 5000
الأن نشغل ملف العميل والذي مفترض أن يعمل بالطبع في جهاز مختلف متصل مع هذا الجهاز ، لكني جربته على الـ Local Host ، وسأدخل عنوان الخادم الذي أريد الأتصال به ، وأسم العميل ورقم المنفذ ، وبعدها أضغط على أتصال ، وسوف يتصل بالخادم وسيتغير الـ Label هناك باسم المشرف هنا . بعدها نبدأ بالتقاط العرض من الكاميرا بالضغط على بدء المراقبه بالكاميرا (وهنا سوف يتنشط زر "حفظ الصوره" والذي يحدد لى الصوره الأمنه ) :
قمت بمراقبه الهاتف ، لكي أعرف من سوف يتصل بالساعه الفلانيه
الى هنا حاله النظام سواء في الخادم أو العميل غير معروفه لأني لم أحدد الصوره الأمنه :
الأن قمت بضغط زر "حفظ الصوره الحاليه" في العميل ، ومن هنا سوف نبدأ بأخذ لقطه كل ثانيه ومقارنتها بالصوره الأمنه ، وشريط الحاله يدل على حال النظام في اللحظه :
هنا يد أمتدت لكي تمسك سماعه الهاتف ، وتم أكتشاف الأختلاف وتغيرت حاله النظام ، ويشتغل الأنذار في الخادم ، ويقوم الخادم بتسجيل التاريخ والوقت في ملف Log لديه ، ويقوم العميل بحفظ هذه الصوره الغير أمنه في ملف بالسي :
هنا قام أحدهم بالأتصال ، لاحظ أيضا تغير حاله النظام :
يمكن للخادم والعميل أجراء حوار بسيط بينهم Chat ، وستظهر في Text Area في الجهه الأخرى :
ملف اللوق يحتوي على التاريخ والزمن ، وأسم المشرف (العميل) في لحظه الأختراق :
يمكن للعميل تغيير نوع الحمايه (أثناء عمليه المراقبه ) :
كما ذكرت سوف يتم حفظ جميع الصور في السي ، في ملف ينشئه البرنامج باسم NotSecure Picture :
عن البرنامج و المبرمج :
ملاحظات أخيره :
البرنامج لن يعمل على أنظمه Linux ولذلك لأن أسم الكاميرا في تلك الأنظمه يختلف عن ويندوز ، حيث في ويندوز تبدأ هذه الـDevice بالأسم vfw ، ويختلف عن لينوكس على ما أظن ، أيضا لاحظ أني أستخدم Look & Feel الخاص بويندوز وبالتالي سوف يحصل exception في حال لم يجده (لا أدري هل سوف يعمل على لينوكس ؟) . أيضا قمت بحفظ الصور في ملف بالسي ، لذلك يجب التغيير في حال قمت بالعمل على نظام أخر .
أتصال العميل بالخادم يتم عبر البورت التي تحدده في بدايه البرنامج ، أما RTP Stream والتي سيبدأ ارسالها فور أن يبدأ العميل بالضغط على "بدء المراقبه" سيعمل على بورت مختلف وهو البورت الحالي + 2 .
لشرح الكود يحتاج أولا لفهم الـ Architecture الخاص بـ JMF وبعدها الأمر بسيط ، حيث في البرنامج أستخدمنا أربعه أمور في المكتبه :
أولا البحث عن جهاز الكاميرا باستخدام CaptureDeviceManager و CaptureDeviceInfo .
بعدها تشغيل الكاميرا ، ولم أعتمد على الـ Player والسبب أني لا أستطيع عمل Clone له ، وأنا احتاج لـ Clone لكي أرسل النسخه الثانيه لـ Server . لذلك أخترت Processor .
لكي ألتقط صوره Capture من المشهد سوف أستخدم FrameGrabbingControl ويعدها نحصل Buffer أحوله الى VideoFormat وأنشى منه Image وبعدها أحفظها لدي في القرص .
أخيرا أرسال النسخه الجديده بعد عمل Clone للخادم ولذلك باستخدم الـ DataSink .
يمكن أن نضيف خاصيه حفظ للفيديو في البرنامج ، فقط سوف نحتاج الى DataSink موجهه لملف لكي نحفظه هذا اذا كنا في العميل ، أما اذا كنا في الخادم علينا أن نتعامل مع الProcessor وليس Player حتى نكتب الفيديو في ملف AVI مثلا ، لذلك يجب التحويل من Player والتعامل مع Processor .
الملف المرفق Camera Monitor System يحتوي على مجلدين :
Executable File يحتوي على برنامج العميل والخادم بصيغه jar جاهزه للعمل .
Source Code يحتوي على السورس للبرنامج ، يمكنك فتحه بـ Netbeans 5 لأنه مكتوب به ..
ملف gong.au وهو الأنذار ، عليك وضعه في السي قبل بدء العمل بالبرنامج ..
أي سؤال ، أو نقد في الشفره، أو أقتراح يرحب به...
الى اللقاء .

