跳转到主要内容

Mopidy的扩展,通过MPRIS D-Bus接口控制Mopidy

项目描述

Latest PyPI version CircleCI build status Test coverage

Mopidy 扩展,通过使用MPRIS规范通过D-Bus控制Mopidy。

Mopidy-MPRIS支持MPRIS规范的最低要求,以及可选的播放列表接口。目前不支持曲目列表接口

目录

要求

  • pydbus D-Bus Python 绑定,它又依赖于 python-gi。因此,通常最简单的方法是使用您发行版的软件包管理器进行安装。

安装

通过运行以下命令进行安装

sudo python3 -m pip install Mopidy-MPRIS

有关替代安装方法,请参阅 https://mopidy.com/ext/mpris/

配置

MPRIS 扩展工作不需要进行任何配置。

以下配置值可用

  • mpris/enabled:如果应启用 MPRIS 扩展。默认为 true

  • mpris/bus_type:Mopidy-MPRIS 应连接到的 D-Bus 总线的类型。选项包括 session(默认)和 system

使用

Mopidy-MPRIS 安装后,您的 Mopidy 服务器已重启,Mopidy-MPRIS 扩展将在 D-Bus 上宣布其存在,以便您的系统上的任何 MPRIS 兼容客户端都可以与之交互。您通过 MPRIS 控制 Mopidy 的确切方式取决于您使用的 MPRIS 客户端。

客户端

以下客户端已与 Mopidy-MPRIS 进行了测试。

GNOME Shell 内置

状态

不工作

测试版本

Ubuntu 18.10,GNOME Shell 3.30.1-2ubuntu1,Mopidy-MPRIS 2.0.0

GNOME Shell,这是 Ubuntu 18.04 及以后的默认桌面,有一个内置的 MPRIS 客户端。此客户端似乎与 Spotify 的播放器配合得很好,但 Mopidy-MPRIS 没有显示在这里。

如果您有任何关于如何使此功能正常工作的建议,请提交一个问题。

gnome-shell-extensions-mediaplayer

状态

工作

测试版本

Ubuntu 18.10,GNOME Shell 3.30.1-2ubuntu1,gnome-shell-extension-mediaplayer 63,Mopidy-MPRIS 2.0.0

网站

https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer

gnome-shell-extensions-mediaplayer 是一个功能丰富的 MPRIS 客户端,作为 GNOME Shell 的扩展构建。在 v2.0 中对 Mopidy-MPRIS 的改进后,此扩展与 Mopidy 的工作非常好。

gnome-shell-extensions-mpris-indicator-button

状态

工作

测试版本

Ubuntu 18.10,GNOME Shell 3.30.1-2ubuntu1,gnome-shell-extensions-mpris-indicator-button 5,Mopidy-MPRIS 2.0.0

网站

https://github.com/JasonLG1979/gnome-shell-extensions-mpris-indicator-button/

gnome-shell-extensions-mpris-indicator-button 是 gnome-shell-extensions-mediaplayer 的简约版本。它与 Mopidy-MPRIS 一起工作,但播放/暂停按钮在 Mopidy 开始播放时不会改变状态。

如果您有任何关于如何使播放/暂停按钮正确显示的建议,请提交一个问题。

Ubuntu 声音菜单

状态

未知

历史上,Ubuntu 声音菜单是 Mopidy-MPRIS 开发的主要目标。由于 Ubuntu 18.04 用 GNOME Shell 替换了 Unity,因此这种情况不再存在。目前尚不清楚 Mopidy-MPRIS 在旧 Ubuntu 设置中工作到何种程度。

如果您使用 Unity 的 Ubuntu 设置并已测试 Mopidy-MPRIS,请提交一个问题以分享您的结果。

高级设置

作为服务运行

如果您对在 Mopidy 作为服务运行时如何最佳配置 Mopidy-MPRIS 有任何意见,请在 问题 #15 中添加评论。

系统总线上的 MPRIS

您可以将 mpris/bus_type 配置值设置为 system。这将导致 Mopidy-MPRIS 在系统总线上而不是登录用户的会话总线上使其本身可用。

默认设置通常不允许 Mopidy 在 D-Bus 系统总线上发布其服务,这会导致 Mopidy 的日志中出现类似以下警告

MPRIS frontend setup failed (g-dbus-error-quark:
GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Connection ":1.3071"
is not allowed to own the service "org.mpris.MediaPlayer2.mopidy" due to
security policies in the configuration file (9))

为了解决这个问题,请创建一个包含以下内容的文件 /etc/dbus-1/system.d/org.mpris.MediaPlayer2.mopidy.conf

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <!-- Allow mopidy user to publish the Mopidy-MPRIS service -->
  <policy user="mopidy">
    <allow own="org.mpris.MediaPlayer2.mopidy"/>
  </policy>

  <!-- Allow anyone to invoke methods on the Mopidy-MPRIS service -->
  <policy context="default">
    <allow send_destination="org.mpris.MediaPlayer2.mopidy"/>
    <allow receive_sender="org.mpris.MediaPlayer2.mopidy"/>
  </policy>
</busconfig>

如果您以不同于 mopidy 的用户运行 Mopidy,您必须相应地更新上述文件中的 user="mopidy"

一旦文件就绪,您必须重新启动 Mopidy 以使更改生效。

要测试设置,您可以在系统上的任何用户下运行以下命令来播放/暂停音乐

dbus-send --system --print-reply \
  --dest=org.mpris.MediaPlayer2.mopidy \
  /org/mpris/MediaPlayer2 \
  org.mpris.MediaPlayer2.Player.PlayPause

与 Rygel 的 UPnP/DLNA

Rygel 是一个应用程序,它将在 Mopidy 的 MPRIS 接口和 UPnP 之间进行转换。Rygel 必须在 Mopidy 相同的机器上运行,但它将使任何可以控制 UPnP/DLNA 媒体播放器的本地网络设备都可以控制 Mopidy。

设置过程大致如下

  1. 安装 Rygel。

    在 Debian/Ubuntu/Raspbian 上

    sudo apt install rygel
  2. 启用 Rygel 的 MPRIS 插件。

    在 Debian/Ubuntu/Raspbian 上,编辑 /etc/rygel.conf,找到 [MPRIS] 部分,将 enabled=false 改为 enabled=true

  3. 启动 Rygel。

    要以当前用户启动它

    systemctl --user start rygel

    要使 Rygel 在启动时以当前用户启动

    systemctl --user enable rygel
  4. 配置您的系统防火墙以允许本地网络访问 Rygel。具体方法超出了本文档的范围。

  5. 以启用 Mopidy-MPRIS 的方式启动 Mopidy。

  6. 如果您使用以下命令查看 Rygel 的日志输出

    journalctl --user -feu rygel

    您应该看到一个类似的日志条目

    New plugin "org.mpris.MediaPlayer2.mopidy" available
  1. 如果一切顺利,现在您应该能够从您的本地网络中任何可以控制 UPnP/DLNA 媒体播放器的设备上控制 Mopidy,例如 Android 应用 BubbleUPnP。

或者,upmpdcli 与 Mopidy-MPD 结合使用 可以实现与这个设置相同的目的。

开发技巧

Mopidy-MPRIS 拥有一个庞大的测试套件,因此所有更改或新增的第一步是添加一个测试用例来测试新的代码。然而,使测试通过并不保证 D-Bus 总线上的输出是正确的。要通过对总线进行内省,有几个有用的工具。

使用 D-Feet 浏览 MPRIS API

D-Feet 是一个图形 D-Bus 浏览器。在 Debian/Ubuntu 系统上,可以通过运行以下命令安装

sudo apt install d-feet

然后运行 d-feet 命令。在 D-Feet 窗口中,选择与您运行 Mopidy-MPRIS 的总线对应的选项卡,通常是会话总线。然后搜索“MediaPlayer2”以查找所有可用的 MPRIS 接口。

要获取属性的当前值,双击它。要执行一个方法,双击它,提供任何必需的参数,然后单击“执行”。

有关 D-Feet 的更多信息,请参阅 GNOME 维基

使用 pydbus 测试 MPRIS API

要直接使用 MPRIS API,启动 Mopidy,然后在 Python shell 中运行以下命令以使用 pydbus 作为 MPRIS 客户端

>>> import pydbus
>>> bus = pydbus.SessionBus()
>>> player = bus.get('org.mpris.MediaPlayer2.mopidy', '/org/mpris/MediaPlayer2')

现在您可以通过播放器对象控制 Mopidy。要从 Mopidy 获取属性,例如运行

>>> player.PlaybackStatus
'Playing'
>>> player.Metadata
{'mpris:artUrl': 'https://i.scdn.co/image/8eb49b41eeb45c1cf53e1ddfea7973d9ca257777',
 'mpris:length': 342000000,
 'mpris:trackid': '/com/mopidy/track/36',
 'xesam:album': '65/Milo',
 'xesam:albumArtist': ['Kiasmos'],
 'xesam:artist': ['Rival Consoles'],
 'xesam:discNumber': 1,
 'xesam:title': 'Arp',
 'xesam:trackNumber': 5,
 'xesam:url': 'spotify:track:7CoxEEsqo3XdvUsScRV4WD'}
>>>

要通过 D-Bus 暂停 Mopidy 的播放,运行

>>> player.Pause()
>>>

有关 API 的详细信息,请参阅 MPRIS 规范

项目资源

鸣谢

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

Mopidy-MPRIS-3.0.3.tar.gz (26.3 kB 查看哈希值)

上传时间 源代码

构建分发

Mopidy_MPRIS-3.0.3-py3-none-any.whl (18.1 kB 查看哈希值)

上传时间 Python 3