mpris_server предоставляет адаптеры для интеграции поддержки MPRIS в ваш медиаплеер или устройство. Поддерживая MPRI в вашем приложении, вы позволите пользователям 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
Клонируйте репо, запустите pip3 install -r requirements.txt , затем python3 setup.py install .
adapters.MprisAdapter adapters.MprisAdapter подкласса.mprisadapter и реализуйте каждый метод.
После подкласса передайте экземпляр server.Server .
events.EventAdapter Подкласс adapters.EventAdapter . EventApter. Этот интерфейс имеет хорошую реализацию по умолчанию, переопределяет его методы, только если ваше приложение требует его.
Если вы решите переосмыслить его методы, вызовите emit_changes() с соответствующим интерфейсом и List[str] , которые изменились.
Интегрируйте адаптер с вашим приложением для излучения изменений в вашем медиаплеере, о которых DBUS должен знать. Например, если пользователь делает паузу медиаплеере, обязательно позвоните в EventAdapter.on_playpause() в приложении. В противном случае DBU не узнает об изменении.
Создайте экземпляр server.Server , пропустите его экземпляр вашего MprisAdapter и Call publish() , чтобы опубликовать свой медиаплеер через DBU.
mpris = Server ( 'MyMediaPlayer' , adapter = my_adapter )
mpris . publish () Вызовите 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 . Напишите мне, если вы хотите использовать этот проект с другой лицензией.