
gstreamer
کتابخانه پایتون منبع باز برای پردازش چندرسانهای
ساخت برنامههای رسانهای استریمینگ با GStreamer: خطوط لوله صوتی/ویدئویی، مدیریت فرمتها و پردازش زمان واقعی.
gstreamer چیست؟
GStreamer یک چارچوب چندرسانهای متنباز قدرتمند است که به توسعهدهندگان امکان میدهد برنامههای پیشرفته پخش رسانهای را ایجاد کنند. این چارچوب معماری لولهکشی انعطافپذیری برای پردازش جریانهای صوتی و تصویری فراهم میکند و از طیف گستردهای از فرمتها، پروتکلها و افزونهها پشتیبانی میکند. با استفاده از بایندینگهای پایتون، توسعهدهندگان میتوانند به سرعت نمونهسازی و استقرار گردش کارهای پردازش رسانهای را انجام دهند، از جمله پخش زنده، ضبط، تبدیل فرمت و افکتهای زمان واقعی. این چارچوب بهطور گستردهای در سیستمهای تعبیهشده، برنامههای دسکتاپ و خدمات رسانهای مبتنی بر ابر مورد استفاده قرار میگیرد.
در هستهٔ خود، GStreamer از یک سیستم افزونهٔ مدولار استفاده میکند که امکان ادغام یکپارچهٔ کدکها، فیلترها و منبعهای سفارشی را فراهم میسازد. پشتیبانی چندپلتفرمی آن شامل لینوکس، ویندوز، macOS و محیطهای موبایلی است و آن را برای راهحلهای رسانهای قابل حمل ایدهآل میکند. توسعهدهندگان میتوانند از پایتون برای کنترل ساختار خط لوله، پیکربندی عناصر و مدیریت رویدادها استفاده کنند، در حالی که از پردازش سطح C با عملکرد بالا بهره میبرند. این پروژه بهصورت فعال توسط جامعه freedesktop.org نگهداری میشود و شامل مستندات جامع، آموزشها و مثالهایی برای تسریع توسعه است.
شروع کار با gstreamer
برای شروع استفاده از GStreamer با پایتون، کتابخانه اصلی و بستههای بایندینگ پایتون را نصب کنید. سادهترین روش از طریق pip است: `pip install pygobject` و اطمینان حاصل کنید که بستههای سیستمی مانند `gstreamer1.0` نصب شدهاند. برای توسعه، مخزن رسمی را از [گستریمر گیتهاب](https://github.com/GStreamer/gstreamer) کلون کنید و با استفاده از Meson از منبع بسازید. GStreamer از پایتون 3.8+ پشتیبانی میکند و با توزیعهای اصلی لینوکس، ویندوز و macOS یکپارچه میشود. پس از نصب، میتوانید خطوط لوله رسانهای را بهصورت برنامهنویسی با استفاده از اشیاء و متدهای پایتون بسازید، که امکان نمونهسازی سریع برنامههای چندرسانهای را فراهم میکند.
نصب GStreamer از طریق Pip (اتصالات پایتون)
pip install pygobject
# On Ubuntu/Debian: sudo apt install gir1.2-gstreamer-1.0 gstreamer1.0-plugins-base
# On macOS: brew install gstreamer pygobject3
ساخت خطوط لوله رسانهای با پایتون
معماری لولهکشی GStreamer به توسعهدهندگان امکان میدهد عناصر مانند منبعها، فیلترها و سینکها را بهصورت زنجیرهای برای پردازش جریانهای رسانهای متصل کنند. با استفاده از پایتون، میتوانید این لولهها را بهصورت برنامهنویسی ایجاد، پیکربندی و کنترل کنید. عناصر از طریق پدها ارتباط برقرار میکنند و از لینکگذاری پویا پشتیبانی مینمایند، که امکان ایجاد جریانهای کاری پیچیدهای مانند تبدیل فرمت، ضبط یا پخش زنده را فراهم میکند. بایندینگهای پایتون، تمام API GStreamer را در اختیار میگذارند، از جمله مدیریت پیامهای باس، تغییرات وضعیت و دستکاری ویژگیها. این امکان را میدهد تا برنامههای واکنشپذیری بسازید که بهصورت زمان واقعی به رویدادهای رسانهای، خطاها یا شرایط پایانجریان واکنش نشان دهند. لولهها میتوانند با استفاده از تابع `gst_parse_launch` تعریف شوند یا بهصورت عنصر به عنصر برای کنترل دقیق ساخته شوند.
ایجاد یک خط لوله ویدئویی ساده با پایتون
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)
# Wait for EOS or error
bus = pipeline.get_bus()
msg = bus.timed_pop_filtered(Gst.CLOCK_TIME_NONE, Gst.MessageType.EOS | Gst.MessageType.ERROR)
pipeline.set_state(Gst.State.NULL)
پخش زنده در زمان واقعی و پشتیبانی از شبکه
GStreamer در پخش زنده زمان واقعی با پشتیبانی قوی از پروتکلهایی مانند RTSP، RTP، HLS و DASH برتری دارد. توسعهدهندگان میتوانند با استفاده از Python سرور یا کلاینتهای پخش زنده را برای مدیریت منبعها، رمزگذارها و سینکهای شبکه بسازند. این چارچوب بهصورت شفاف همگامسازی، بافرینگ جیتر و مخفیسازی از دست رفتن بستهها را مدیریت میکند. با عناصری مانند `tcpserversink`، `udpsink` و `rtspclientsink` میتوانید ویدئو را از دوربینها یا فایلها بر روی شبکههای محلی یا اینترنت پخش کنید. اسکریپتهای Python میتوانند بهصورت پویا بیتریت، وضوح یا پارامترهای رمزگذاری را بر اساس شرایط شبکه یا ورودی کاربر تنظیم کنند و راهحلهای پخش سازگار را فعال سازند. طراحی مدولار GStreamer همچنین از افزونههای پروتکل سفارشی برای موارد استفاده خاص پشتیبانی میکند.
پخش ویدیو از طریق RTSP با استفاده از پایتون
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! x264enc ! rtspclientsink location=rtsp://localhost:8554/stream")
pipeline.set_state(Gst.State.PLAYING)
loop = GObject.MainLoop()
try:
loop.run()
except KeyboardInterrupt:
pass
pipeline.set_state(Gst.State.NULL)
شتابدهی سختافزاری و قابلیت گسترش افزونهها
GStreamer ادغام یکپارچهای با شتابدهندههای سختافزاری مانند NVIDIA CUDA، Intel Quick Sync و ARM Mali از طریق افزونههای اختصاصی فراهم میکند. توسعهدهندگان میتوانند از شتاب GPU برای رمزگشایی، رمزگذاری و ترکیب ویدیو بدون بازنویسی منطق اصلی استفاده کنند. سیستم افزونه امکان نوشتن عناصر سفارشی به زبانهای C، Python یا سایر زبانها و بارگذاری دینامیک آنها را میدهد. افزونههای Python میتوانند با استفاده از `Gst.ElementFactory` ایجاد و در زمان اجرا ثبت شوند، که امکان آزمایش سریع را فراهم میآورد. این انعطافپذیری موارد استفادهای مانند فیلترهای سفارشی، خطوط لوله استنتاج هوش مصنوعی یا کدکهای اختصاصی را پشتیبانی میکند. افزونهها بهصورت خودکار از طریق `gst-inspect-1.0` کشف میشوند و قابلیتهای آنها میتواند بهصورت برنامهنویسی در Python پرس و جو شود تا خطوط لوله سازگار ساخته شوند.
فعالسازی رمزگشایی سختافزاری شتابدار با پایتون
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
# Example for VAAPI on Linux with Intel GPU
pipeline = Gst.parse_launch("filesrc location=video.mp4 ! qtdemux ! h264parse ! vaapih264dec ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)
# Run pipeline...
خط لوله پردازش رسانه و افکتها
GStreamer شامل مجموعهای غنی از عناصر داخلی برای پردازش صدا/ویدئو است، مانند مقیاسبندی، تبدیل رنگ، برش، ترکیب و میکس صدا. توسعهدهندگان میتوانند این عناصر را بهصورت زنجیرهای ترکیب کنند تا زنجیرههای اثر پیشرفتهای ایجاد کنند—مانند اعمال فیلترها، پوششها یا تبدیلهای مبتنی بر زمان—کاملاً در پایتون. عناصری مانند `videoscale`، `videoconvert`، `textoverlay` و `audioresample` پردازش با کیفیت بالا را با پیکربندی حداقل فراهم میکنند. اثرات سفارشی میتوانند با استفاده از `GstBase.BaseTransform` یا `GstBase.BaseAggregator` در پایتون پیادهسازی شوند، که امکان دستکاری زمان واقعی جریانهای رسانهای را فراهم میآورد. این باعث میشود GStreamer برای برنامههایی مانند ویدئو کنفرانس، پخش زنده یا ابزارهای ایجاد محتوا که پردازش با تأخیر کم حیاتی است، ایدهآل باشد.
اعمال پوشش متن و تغییر اندازه ویدیو با پایتون
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst
Gst.init(None)
pipeline = Gst.parse_launch("videotestsrc ! textoverlay text='Hello GStreamer' font-desc='Sans 24' ! videoscale ! videoconvert ! autovideosink")
pipeline.set_state(Gst.State.PLAYING)
# Run pipeline...
