Publish a MediaPlayer2 MPRIS device to D-Bus.
▶️ Add MPRIS Integration to Media Players
mpris_server provides adapters to integrate MPRIS support in your media player or device. By supporting MPRIS in your app, you will allow Linux users to control all aspects of playback from the media controllers they already have installed.
Whereas existing MPRIS libraries for Python implement clients for apps with existing MPRIS support,
mpris_server is a library to implement MPRIS support in apps that don't already have it. If you want to give your media player an MPRIS interface,
mpris_server is right for you.
mpris_server is a fork of Mopidy-MPRIS that was extended and made into a general purpose library.
Check out 📺chromecast_mpris for an app that uses
Implements the following from the MPRIS specification:
- <input type="checkbox" checked="" disabled="" /> MediaPlayer2
- <input type="checkbox" checked="" disabled="" /> MediaPlayer2.Player
- <input type="checkbox" checked="" disabled="" /> MediaPlayer2.Playlist
- <input type="checkbox" checked="" disabled="" /> MediaPlayer2.TrackList
The library also provides an event handler that emits
org.freedesktop.DBus.Properties.PropertiesChanged in response to changes in your media player. This allows for real-time updates from your media player to DBus.
On Debian-derived distributions like Ubuntu, install
apt. On Arch, you'll want to install
python-gobject. On macOS, install
pip to install
PyGObject>=3.34.0 if there are no installation candidates available in your vendor's package repositories.
pip3 install mpris_server
Clone the repo, run
pip3 install -r requirements.txt, followed by
python3 setup.py install.
adapters.MprisAdapter and implement each method.
After subclassing, pass an instance to an instance of
adapters.EventAdapter. This interface has a good default implementation, only override its methods if your app calls for it.
If you choose to re-implement its methods, call
emit_changes() with the corresponding interface and a
List[str] of properties that changed.
Integrate the adapter with your application to emit changes in your media player that DBus needs to know about. For example, if the user pauses the media player, be sure to call
EventAdapter.on_playpause() in the app. DBus won't know about the change otherwise.
Create the Server and Publish
Create an instance of
server.Server, pass it an instance of your
MprisAdapter, and call
publish() to publish your media player via DBus.
mpris = Server('MyMediaPlayer', adapter=my_adapter) mpris.publish()
loop() to enter the DBus event loop, or enter the DBus event loop elsewhere in your code.
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()
Want to support this project and other open-source projects like it?
mpris_server is released under the LGPLv3, see
LICENSE. Message me if you'd like to use this project with a different license.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size mpris_server-0.2.18-py2.py3-none-any.whl (16.0 kB)||File type Wheel||Python version py2.py3||Upload date||Hashes View|
|Filename, size mpris_server-0.2.18.tar.gz (14.8 kB)||File type Source||Python version None||Upload date||Hashes View|
Hashes for mpris_server-0.2.18-py2.py3-none-any.whl