يوفر mpris_server محولات لدمج دعم MPRIs في مشغل الوسائط أو جهازك. من خلال دعم MPRIs في تطبيقك ، ستسمح لمستخدمي Linux بالتحكم في جميع جوانب التشغيل من وحدات التحكم في الوسائط التي قاموا بتثبيتها بالفعل.
في حين أن مكتبات MPRIS الحالية لـ Python تنفذ العملاء للتطبيقات ذات دعم MPRIs الحالي ، فإن mpris_server هي مكتبة تستخدم لتنفيذ دعم MPRIs في التطبيقات التي لا تملكها بالفعل. إذا كنت ترغب في منح مشغل الوسائط واجهة MPRIS ، فإن mpris_server مناسب لك.
تحقق من cast_control لتطبيق يستخدم mpris_server .
mpris_server هو شوكة من Mopidy-Mpris تم تمديدها وجعلها في مكتبة للأغراض العامة.
ينفذ ما يلي من مواصفات MPRIS:
توفر المكتبة أيضًا معالج الحدث الذي ينبعث منه org.freedesktop.DBus.Properties.PropertiesChanged استجابة للتغييرات في مشغل الوسائط الخاص بك. يسمح هذا بتحديثات في الوقت الفعلي من مشغل الوسائط إلى D-Bus.
project.dependencies في pyproject.toml على توزيعات مشتقة من Debian مثل Ubuntu ، قم بتثبيت python3-gi مع apt . على القوس ، ستحتاج إلى تثبيت python-gobject .
على MacOS ، قم بتثبيت pygobject3 عبر brew . لاحظ أنه لم يتم اختبار mpris_server على macOS ، ولكن من الممكن من الناحية النظرية استخدامها.
استخدم pip لتثبيت PyGObject>=3.34.0 إذا لم يكن هناك مرشحين للتثبيت متاحين في مستودعات حزمة البائع الخاصة بك.
pip3 install mpris_server
استنساخ repo ، قم بتشغيل pip3 install -r requirements.txt ، تليها python3 setup.py install .
adapters.MprisAdapter adapters.MprisAdapter الفئة الفرعية. mprisadapter وتنفيذ كل طريقة.
بعد التصنيف الفرعي ، مرر مثيل إلى مثيل من server.Server .
events.EventAdapter adapters.EventAdapter الفئة الفرعية. تحتوي هذه الواجهة على تطبيق افتراضي جيد ، فقط تجاوز أساليبها إذا كان تطبيقك يتصل به.
إذا اخترت إعادة تنفيذ أساليبها ، فاستدعاء emit_changes() مع الواجهة المقابلة List[str] للخصائص التي تغيرت.
دمج المحول مع تطبيقك لإبعاد التغييرات في مشغل الوسائط الذي يحتاج DBUS إلى معرفته. على سبيل المثال ، إذا توقف المستخدم عن مشغل الوسائط ، فتأكد من استدعاء EventAdapter.on_playpause() في التطبيق. لن تعرف DBUS التغيير خلاف ذلك.
قم بإنشاء مثيل لـ server.Server ، وقم بتمريره بمثابة MprisAdapter ، و Call publish() لنشر مشغل الوسائط الخاص بك عبر DBUs.
mpris = Server ( 'MyMediaPlayer' , adapter = my_adapter )
mpris . publish () Call loop() لإدخال حلقة حدث DBUS ، أو إدخال حلقة حدث DBUS في مكان آخر في الكود الخاص بك.
mpris . loop () أو:
from gi . repository import GLib
loop = GLib . MainLoop ()
loop . run () from mpris_server . adapters import MprisAdapter
from mpris_server . events import EventAdapter
from mpris_server . server import Server
from mpris_server import Metadata
from my_app import app # custom app you want to integrate
class MyAppAdapter ( MprisAdapter ):
# Make sure to implement all methods on MprisAdapter, not just metadata()
def metadata ( self ) -> Metadata :
...
# and so on
class MyAppEventHandler ( EventAdapter ):
# EventAdapter has good default implementations for its methods.
# Only override the default methods if it suits your app.
def on_app_event ( self , event : str ):
# trigger DBus updates based on events in your app
if event == 'pause' :
self . on_playpause ()
...
# and so on
# create mpris adapter and initialize mpris server
my_adapter = MyAppAdapter ()
mpris = Server ( 'MyApp' , adapter = my_adapter )
# initialize app integration with mpris
event_handler = MyAppEventHandler ( root = mpris . root , player = mpris . player )
app . register_event_handler ( event_handler )
# publish and serve
mpris . loop ()هل تريد دعم هذا المشروع وغيرها من المشاريع المفتوحة المصدر مثله؟
يتم إصدار mpris_server بموجب AGPLV3 ، انظر LICENSE . أرسل لي رسالة إذا كنت ترغب في استخدام هذا المشروع برخصة مختلفة.