الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مكتبة لعمل MJPEG Streaming .. لبث فيديو من سطح مكتبك!

مثبّت
بدأه رغيد الطيب في 25 أبريل 2012 · 3 رد · 4,153 مشاهدة · في برمجة الشبكات والتطبيقات الموزعة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله السميع العليم

مقدمة

اود هنا ان اقدم برنامج صغير ... يمثل سرفر لعمل بث فيديو من النوع MJPEG او ما يعرف بالـ Motion-JPEG .... وهو عبارة عن استريم من مجموعة صور JPG ترسل بالتتابع عبر برتوكول الـ HTTP .. إمكانية بث فيديو مباشر من كمبيوترك الى

اي جهاز عميل ... إياً كان مصدر هذ البث : من الشاشة ... او الكاميرا ... او الهارد ديسك ... او اي مصدر آخر تريده.

لماذا MJPEG Streaming بالتحديد ؟

يكمن سبب إختياري للـ MJPEG بالتحديد على الرغم من ان عملية ارسال صور الى جهاز بعيد ممكنة بعدة طرق اسرع و افضل ... السبب هو كون هذا البروتكول مدعوم ضمنيا من قبل عدة برامج وعلى عدة منصات (اجهزة كمبيوتر, اجهزة

ذكية موبيلات , اجهزة لوحية ومعظم كميرات المراقبة IP Cameras تعتمد اغلبها عليه ) ... وذلك لانه يمكنك فتحه بإستخدام اغلب متصفحات الانترنت كالـفايرفوكس او الكروم او مشغل الفي إل سي VLC Player .. إلق نظرة على الصورة

ادناه :

post-40889-014820000 1335303092_thumb.pn

بل يمكن ايضا من هاتفك الذكي ... مثلا آندرويد مع متصفح الفايرفوكس او اي من البرامج المجانية الكثيرة التي يمكن تحميلها من الـ Google Market ... انظر الصورة التالية :

post-40889-035700500 1335303066_thumb.pn

كيف يمكن استخدام المكتبة المرفقة هنا ؟

لن اخوض هنا في تفاصيل الـ MJPEG ولكنني سوف اوضح كيفية استغلال البرنامج المرفق هنا لبث سلسة من الصور على شكل فيديو يمكن عرضه من اي جهاز بعيد.

الفئة الاساسية في برنامجنا وهي الـ ImageStreamingServer وتحتوي هذه الفئة على أمرين methods و ثلاثة خصائص properties :

الوظائف أو الأوامر :

 1 - Start() : تشغيل السرفر على منفذ معين.
 2 - Stop() : إيقاف تشغيل السرفر و اغلاق كل الإتصالات الحالية.

و الخصائص التالية :

 1 - ImagesSource : مصدر الصور التي سيتم عمل استريمنج لها و إرسالها الى اي عميل يطلبها.
 2 - Interval : المدة الزمينة التي ينبغي على السرفر الانتظار فيها بعد كل صورة يرسلها.
 3 - IsRunning : يمكن بواسطتها معرفة اذا كان السرفر شغال حاليا ام لا.
 4 - Cleints : يعيد لك مصفوفة بكل الاتصالات النشطة حاليا.

مثال :

لكي نجعل السرفر يقوم ببث فيديو عن سطح مكتبنا الحالي الى اي جهاز (سوف نحتاج الى كود مكون من سطرين برمجيين فقط بإستخدام هذه المكتبة !!) ... ImageStreamingServer كالتالي :

ImageStreamingServer server = new ImageStreamingServer(); 
server.Start(8080);

والان لكي تتصل بالسرفر من الجهاز الحالي او جهاز بعيد .... افتح متصفح الانترنت جوجل كروم او فايرفكس (لأن الانترنت اكسبلور من مايكروسوفت حاليا لايدعمه بشكل مباشر انما يمكن عن طريق بعض الاضافات) .... بعد فتح متصفحك

اكتب اسم كمبيوترك او عنوان الاي بي متبوعا بـنقطتين فوق بعض (:) ثم رقم المنفذ (وهو في حالتنا السابقة 8080) :

http://127.0.0.1:8080

سوف يظهر لك شيء مشابه لـ :

post-40889-034572800 1335303121_thumb.pn

بناء مصدر الصور الخاص بك :

في المثال السابق الذكر لاحظ انك لم تحدد ان يكون مصدر بياناتك (الصور والفيديو) هو شاشة كمبيوترك ومع ذلك يفترض السرفر هذا المصدر كمصدر افتراضي للصور عن طريق الخاصية ImageSource و التي هي من النوع

 IEnumerable<Image>

ولنفترض انك تريد ان تجعل مصدر الصور ... الكميرا او مجموعة صور الـ JPG في مجلد معين داخل الجهاز ... ينبغي ان تقوم ببناء دالة معينة تقوم بذلك ... كالتالي :

IEnumerable<Image> CameraImagesSource() 
{ 
	// هنا ينبغي ان تكتب الشفرة التي تعيد الصور من الكميرا 
} 

IEnumerable<Image> FolderImagesSource(string path) 
{ 
	// هنا ينبغي ان يكون الكود الذي يعيد الصور من المسار المعين
}

وكمثال عملي تخيل انني اريد ان اقوم ببناء مصدر بيانات لجميع صور ال *.jpg في مجلد معين فإنني ساكتب كود كالتالي :

private IEnumerable<Image> FolderImagesSource(string path)
{
	var files = System.IO.Directory.GetFiles(path, "*.jpg");

	foreach (var file in files)
    	yield return Image.FromFile(file);

	yield break;
}

private void Form1_Load(object sender, EventArgs e)
{
	var source = FolderImagesSource(@"C:\Pictures\");

	_Server = new ImageStreamingServer();
	_Server.ImagesSource = source;
	_Server.Start(8080);
}

في الكود السابق الدالة FolderImagesSource تعيد جميع الصور الموجودة في المجلد "C:\pictures" وفي بداية تشغيل الفورم نقوم بإنشاء كائن من النوع ImageStreamingServer ليمثل سرفرنا و الذي غيرنا الخاصية ImagesSource

التابعة له كي تكون عبارة عن الصور الراجعة من الدالة FolderImagesSource ثم قمنا بتشغيل السرفر عن طريق الدالة Start.

طبعا الكود السابق يمكن اختصاره كثيرا ... كالتالي

var source = System.IO.Directory.GetFiles(@"C:\Pictures\", "*.jpg").Select(s => Image.FromFile(s));
_Server = new ImageStreamingServer(source);
_Server.Start(8080);

في الاصدارات القادمة بإذن الله تعالى .... سنضيف دعم الكاميرا .... او نافذة معينة او فيديو من برنامج معين او منطقة في الشاشة ... بحيث يتم بثها بواسطة الـ MJPEG Streaming ..

اتمنى للجميع الإستفادة ولنا جلسة اخرى بإذن الله تعالى

السلام عليكم ورحمة الله

rtaVideoStreamer-src.zip

المرفقات
android_mobile.pngfirefox-chrome-vlc-clients.pnggoogle-chrome.png

تم تعديل هذه المشاركة بواسطة رغيد الطيب في 25 أبريل 2012 في 01:20

1

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#2

شكرا لك موضوع مميز يستحق التثبيت

#3

شكرا لكي على هذا الموضوع الرائع والمفيد لكن لي سؤال هل يمكن اسنخدام نفس طريقتك لكن على الصوت بدلا من الصوره

#4

ألف شكر أخي الكريم على هذا الموضوع الجميل

ويا ليت لو تكمل عن طريقة ربط البرنامج بالكاميرا

واجهتني مشاكل مع الكاميرا

وجزاك الله خيرا

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…