mpris_server menyediakan adapter untuk mengintegrasikan dukungan MPRIS di media atau perangkat Anda. Dengan mendukung MPRIS di aplikasi Anda, Anda akan mengizinkan pengguna Linux untuk mengontrol semua aspek pemutaran dari pengontrol media yang sudah mereka instal.
Sedangkan perpustakaan MPRIS yang ada untuk Python mengimplementasikan klien untuk aplikasi dengan dukungan MPRIS yang ada, mpris_server adalah perpustakaan yang digunakan untuk mengimplementasikan dukungan MPRIS di aplikasi yang belum memilikinya. Jika Anda ingin memberi pemutar media antarmuka MPRIS, maka mpris_server tepat untuk Anda.
Lihat cast_control untuk aplikasi yang menggunakan mpris_server .
mpris_server adalah garpu mopidy-mpris yang diperpanjang dan dibuat menjadi perpustakaan tujuan umum.
Mengimplementasikan yang berikut dari spesifikasi MPRIS:
Perpustakaan juga menyediakan penangan acara yang memancarkan org.freedesktop.DBus.Properties.PropertiesChanged sebagai tanggapan terhadap perubahan pada pemutar media Anda. Ini memungkinkan pembaruan real-time dari pemutar media Anda ke D-Bus.
project.dependencies di pyproject.toml Pada distribusi yang diturunkan dari Debian seperti Ubuntu, instal python3-gi dengan apt . Di Arch, Anda ingin menginstal python-gobject .
Pada macOS, instal pygobject3 melalui brew . Perhatikan bahwa mpris_server pada macOS belum diuji, tetapi secara teori dimungkinkan untuk digunakan.
Gunakan pip untuk menginstal PyGObject>=3.34.0 Jika tidak ada kandidat instalasi yang tersedia di repositori paket vendor Anda.
pip3 install mpris_server
Kloning repo, jalankan pip3 install -r requirements.txt , diikuti oleh python3 setup.py install .
adapters.MprisAdapter Subclass adapters.MprisAdapter dan mengimplementasikan setiap metode.
Setelah subklass, berikan contoh ke instance dari server.Server .
events.EventAdapter Subclass adapters.EventAdapter . Antarmuka ini memiliki implementasi default yang baik, hanya mengganti metodenya jika aplikasi Anda membutuhkannya.
Jika Anda memilih untuk mengimplementasikan kembali metodenya, hubungi emit_changes() dengan antarmuka yang sesuai dan List[str] properti yang berubah.
Integrasikan adaptor dengan aplikasi Anda untuk memancarkan perubahan dalam pemutar media Anda yang perlu diketahui DBU. Misalnya, jika pengguna berhenti dari pemutar media, pastikan untuk menelepon EventAdapter.on_playpause() di aplikasi. DBU tidak akan tahu tentang perubahan sebaliknya.
Buat instance dari server.Server , berikan contoh dari MprisAdapter Anda, dan hubungi publish() untuk menerbitkan pemutar media Anda melalui DBUS.
mpris = Server ( 'MyMediaPlayer' , adapter = my_adapter )
mpris . publish () Hubungi loop() untuk memasukkan Loop Acara DBUS, atau memasukkan Loop Acara DBUS di tempat lain dalam kode Anda.
mpris . loop () Atau:
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 ()Ingin mendukung proyek ini dan proyek open-source lainnya seperti itu?
mpris_server dirilis di bawah AGPLV3, lihat LICENSE . Kirimi saya pesan jika Anda ingin menggunakan proyek ini dengan lisensi yang berbeda.