mpris_server proporciona adaptadores para integrar el soporte de MPRIS en su reproductor multimedia o dispositivo. Al admitir MPRIS en su aplicación, permitirá a los usuarios de Linux controlar todos los aspectos de la reproducción de los controladores de medios que ya han instalado.
Mientras que las bibliotecas MPRIS existentes para Python implementan clientes para aplicaciones con soporte de MPRIS existente, mpris_server es una biblioteca utilizada para implementar el soporte de MPRIS en aplicaciones que aún no lo tienen. Si desea darle a su reproductor multimedia una interfaz MPRIS, entonces mpris_server es adecuado para usted.
Consulte cast_control para obtener una aplicación que usa mpris_server .
mpris_server es una bifurcación de Mopidy-MPRIS que se extendió y se convirtió en una biblioteca de propósito general.
Implementa lo siguiente de la especificación MPRIS:
La biblioteca también proporciona un controlador de eventos que emite org.freedesktop.DBus.Properties.PropertiesChanged en respuesta a los cambios en su reproductor multimedia. Esto permite actualizaciones en tiempo real de su reproductor multimedia a D-Bus.
project.dependencies en pyproject.toml En distribuciones derivadas de Debian como Ubuntu, instale python3-gi con apt . En Arch, querrás instalar python-gobject .
En MacOS, instale pygobject3 a través de brew . Tenga en cuenta que mpris_server en MacOS no se ha probado, pero es teóricamente posible de usar.
Use pip para instalar PyGObject>=3.34.0 si no hay candidatos de instalación disponibles en los repositorios de paquetes de su proveedor.
pip3 install mpris_server
Clone el repositorio, ejecute pip3 install -r requirements.txt , seguido de python3 setup.py install .
adapters.MprisAdapter Subclase adapters.MprisAdapter e implementa cada método.
Después de subclasificar, pase una instancia a una instancia de server.Server .
events.EventAdapter adapters.EventAdapter de subclase. EventAdapter. Esta interfaz tiene una buena implementación predeterminada, solo anule sus métodos si su aplicación lo requiere.
Si elige volver a implementar sus métodos, llame emit_changes() con la interfaz correspondiente y una List[str] de propiedades que cambiaron.
Integre el adaptador con su aplicación para emitir cambios en su reproductor multimedia que DBUS necesita conocer. Por ejemplo, si el usuario detiene el reproductor multimedia, asegúrese de llamar EventAdapter.on_playpause() en la aplicación. DBUS no sabrá sobre el cambio de otra manera.
Cree una instancia de server.Server , pase una instancia de su MprisAdapter y llame publish() para publicar su reproductor multimedia a través de DBUS.
mpris = Server ( 'MyMediaPlayer' , adapter = my_adapter )
mpris . publish () Llame loop() para ingresar el bucle de evento DBUS o ingrese el bucle de eventos DBUS en otro lugar de su código.
mpris . loop () O:
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 ()¿Quiere apoyar este proyecto y otros proyectos de código abierto como este?
mpris_server se lanza bajo el AGPLV3, ver LICENSE . Envíeme un mensaje si desea usar este proyecto con una licencia diferente.