Mopidy的扩展,通过MPRIS D-Bus接口控制Mopidy
项目描述
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 的工作非常好。
高级设置
作为服务运行
如果您对在 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。
设置过程大致如下
安装 Rygel。
在 Debian/Ubuntu/Raspbian 上
sudo apt install rygel
启用 Rygel 的 MPRIS 插件。
在 Debian/Ubuntu/Raspbian 上,编辑 /etc/rygel.conf,找到 [MPRIS] 部分,将 enabled=false 改为 enabled=true。
启动 Rygel。
要以当前用户启动它
systemctl --user start rygel
要使 Rygel 在启动时以当前用户启动
systemctl --user enable rygel
配置您的系统防火墙以允许本地网络访问 Rygel。具体方法超出了本文档的范围。
以启用 Mopidy-MPRIS 的方式启动 Mopidy。
如果您使用以下命令查看 Rygel 的日志输出
journalctl --user -feu rygel
您应该看到一个类似的日志条目
New plugin "org.mpris.MediaPlayer2.mopidy" available
如果一切顺利,现在您应该能够从您的本地网络中任何可以控制 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 规范。
项目资源
鸣谢
当前维护者:Stein Magnus Jodal
项目详情
下载文件
下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。