في هذه السلسلة، سنقدم مقدمة مبسطة ومناسبة للمبتدئين إلى عالم GStreamer.

يُعد GStreamer إطار عمل مفتوح المصدر وقويًا لمعالجة الوسائط المتعددة، ويُستخدم لبناء تطبيقات البث والتدفق الإعلامي. يتيح للمطورين إنشاء خطوط معالجة (Pipelines) تقوم بمعالجة البيانات الصوتية والمرئية، وتحويلها، ونقلها عبر مراحل متعددة.

سيركز هذا المحتوى بشكل أساسي على معالجة الفيديو. وبما أن GStreamer مبني فوق مكتبة GLib، فسأوضح أيضًا الفروقات بين واجهات برمجة التطبيقات (APIs) الخاصة بـ GStreamer وتلك الخاصة بـ GLib كلما ظهرت أثناء الشرح. فهم هذا الفرق منذ البداية سيساعدك على تجنب الكثير من الالتباس عند قراءة الأمثلة أو الرجوع إلى الوثائق الرسمية.

ماذا سنتعلم؟

في هذا المقال سنتعرف على:

  • كيفية تثبيت GStreamer.
  • كيفية التأكد من أن GStreamer يعمل بشكل صحيح.
  • كيفية استخدام الأداة gst-launch-1.0.
  • كيفية عرض فيديو بسيط باستخدام خط معالجة (Pipeline) في GStreamer.

محتويات المقال

  1. تثبيت GStreamer.
  2. التحقق من نجاح التثبيت.
  3. عرض فيديو بسيط.
  4. تمارين عملية.

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:

  1. مصدر (Source) يقوم بتوليد البيانات.
  2. البيانات تنتقل عبر خط المعالجة (Pipeline).
  3. وجهة (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

أسئلة للتفكير

  1. ماذا يحدث عند استخدام num-buffers=100؟
  2. كم عدد أنماط الاختبار (Patterns) المتوفرة في videotestsrc؟
  3. ما المعلومات الإضافية التي تظهر عند تفعيل GST_DEBUG=2؟

الخلاصة

في هذا المقال تعلمنا:

  • ما هو GStreamer.
  • كيفية تثبيته.
  • كيفية التحقق من نجاح التثبيت.
  • كيفية استخدام الأداة gst-launch-1.0.
  • كيفية إنشاء وتشغيل أبسط خط معالجة فيديو ممكن باستخدام GStreamer.

في المقال القادم سنبدأ بالتعمق أكثر في مفهوم العناصر (Elements) وكيفية بناء خطوط معالجة أكثر تعقيدًا لمعالجة الفيديو.