Part 0: Helloworld Gstreamer
في هذه السلسلة، سنقدم مقدمة مبسطة ومناسبة للمبتدئين إلى عالم GStreamer.
يُعد GStreamer إطار عمل مفتوح المصدر وقويًا لمعالجة الوسائط المتعددة، ويُستخدم لبناء تطبيقات البث والتدفق الإعلامي. يتيح للمطورين إنشاء خطوط معالجة (Pipelines) تقوم بمعالجة البيانات الصوتية والمرئية، وتحويلها، ونقلها عبر مراحل متعددة.
سيركز هذا المحتوى بشكل أساسي على معالجة الفيديو. وبما أن GStreamer مبني فوق مكتبة GLib، فسأوضح أيضًا الفروقات بين واجهات برمجة التطبيقات (APIs) الخاصة بـ GStreamer وتلك الخاصة بـ GLib كلما ظهرت أثناء الشرح. فهم هذا الفرق منذ البداية سيساعدك على تجنب الكثير من الالتباس عند قراءة الأمثلة أو الرجوع إلى الوثائق الرسمية.
ماذا سنتعلم؟
في هذا المقال سنتعرف على:
- كيفية تثبيت GStreamer.
- كيفية التأكد من أن GStreamer يعمل بشكل صحيح.
- كيفية استخدام الأداة
gst-launch-1.0. - كيفية عرض فيديو بسيط باستخدام خط معالجة (Pipeline) في GStreamer.
محتويات المقال
- تثبيت GStreamer.
- التحقق من نجاح التثبيت.
- عرض فيديو بسيط.
- تمارين عملية.
1. تثبيت GStreamer
قبل كتابة أي سطر من الكود، نحتاج أولًا إلى تثبيت GStreamer والإضافات (Plugins) الخاصة به.
على نظام Ubuntu
sudo apt update
sudo apt install \
gstreamer1.0-tools \
gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good
سيقوم هذا الأمر بتثبيت الحزم التالية:
| الحزمة | الوصف |
|---|---|
| gstreamer1.0-tools | أدوات سطر الأوامر مثل gst-launch-1.0 |
| plugins-base | الإضافات الأساسية المستخدمة في معظم التطبيقات |
| plugins-good | إضافات عالية الجودة يتم صيانتها رسميًا من مشروع GStreamer |
| plugins-bad | إضافات تجريبية أو أقل نضجًا (يمكنك تجاهلها في الوقت الحالي) |
| plugins-ugly | إضافات تخضع لقيود ترخيص معينة (يمكنك تجاهلها في الوقت الحالي) |
2. التحقق من نجاح التثبيت
أسهل طريقة للتأكد من نجاح التثبيت هي عرض إصدار البرنامج:
gst-launch-1.0 --version
مثال على المخرجات (Ubuntu 26.04):
gst-launch-1.0 version 1.28.2
GStreamer 1.28.2
https://launchpad.net/ubuntu/+source/gstreamer1.0
إذا ظهر رقم الإصدار، فهذا يعني أن GStreamer تم تثبيته بنجاح.
يمكنك أيضًا استعراض معلومات أي إضافة (Plugin) باستخدام الأمر التالي:
gst-inspect-1.0 videotestsrc
سيعرض هذا الأمر معلومات تفصيلية عن العنصر videotestsrc.
في GStreamer، يُطلق على كل مكوّن داخل خط المعالجة اسم Element (عنصر).
ومن أمثلة العناصر:
- مصدر فيديو (Video Source).
- مفكك ترميز فيديو (Video Decoder).
- مرمز فيديو (Video Encoder).
- وجهة عرض فيديو (Video Sink).
- مصدر بيانات شبكي (Network Source).
سنتناول مفهوم العناصر بالتفصيل في المقالات القادمة.
3. عرض فيديو بسيط
إحدى أهم الأدوات لتعلم GStreamer هي الأداة:
gst-launch-1.0
تسمح لنا هذه الأداة بإنشاء وتشغيل خطوط المعالجة مباشرة من سطر الأوامر دون الحاجة إلى كتابة أي كود.
لنقم بعرض نمط اختبار (Test Pattern):
gst-launch-1.0 videotestsrc ! autovideosink
من المفترض أن تظهر نافذة تحتوي على أشرطة ملونة متحركة.
يتكون خط المعالجة من عنصرين فقط:
videotestsrc -> autovideosink
حيث:
videotestsrcيقوم بتوليد إطارات فيديو تجريبية.autovideosinkيختار تلقائيًا أفضل وسيلة متاحة لعرض الفيديو على جهازك.
الرمز ! يُستخدم لربط عنصرين معًا، وهو يشبه إلى حد كبير مفهوم Pipe في Bash.
في الواقع، خط المعالجة في GStreamer عبارة عن رسم بياني (Graph) يتكون من مجموعة عناصر مترابطة:
+--------------+ +---------------+
| videotestsrc | ---> | autovideosink |
+--------------+ +---------------+
تنتقل البيانات من اليسار إلى اليمين.
التشغيل المستمر
بشكل افتراضي، يقوم videotestsrc بتوليد الإطارات بشكل مستمر دون توقف.
لإيقاف التشغيل اضغط:
Ctrl+C
ماذا حدث خلف الكواليس؟
على الرغم من أن هذا المثال بسيط جدًا، إلا أنه يوضح البنية الأساسية التي يعتمد عليها GStreamer:
- مصدر (Source) يقوم بتوليد البيانات.
- البيانات تنتقل عبر خط المعالجة (Pipeline).
- وجهة (Sink) تستهلك البيانات أو تعرضها.
معظم التطبيقات الواقعية تتبع نفس الفكرة:
Source -> Processing -> Sink
على سبيل المثال:
Camera -> Decoder -> AI Inference -> Display
أو:
File -> Decoder -> Encoder -> Network Stream
ومع تقدمنا في هذه السلسلة، سنستبدل العناصر البسيطة تدريجيًا بعناصر أكثر تطورًا واحترافية.
4. تمارين عملية
جرّب الأوامر التالية ولاحظ الفرق في النتائج.
عرض نمط اختبار مختلف
gst-launch-1.0 videotestsrc pattern=ball ! autovideosink
عرض 100 إطار فقط
gst-launch-1.0 videotestsrc num-buffers=100 ! autovideosink
عرض معلومات تصحيح إضافية
GST_DEBUG=2 gst-launch-1.0 videotestsrc ! autovideosink
أسئلة للتفكير
- ماذا يحدث عند استخدام
num-buffers=100؟ - كم عدد أنماط الاختبار (Patterns) المتوفرة في
videotestsrc؟ - ما المعلومات الإضافية التي تظهر عند تفعيل
GST_DEBUG=2؟
الخلاصة
في هذا المقال تعلمنا:
- ما هو GStreamer.
- كيفية تثبيته.
- كيفية التحقق من نجاح التثبيت.
- كيفية استخدام الأداة
gst-launch-1.0. - كيفية إنشاء وتشغيل أبسط خط معالجة فيديو ممكن باستخدام GStreamer.
في المقال القادم سنبدأ بالتعمق أكثر في مفهوم العناصر (Elements) وكيفية بناء خطوط معالجة أكثر تعقيدًا لمعالجة الفيديو.