0

这个 python 程序将播放来自 Mediaapplayer 的播放列表。当一首歌曲结束或在键盘上键入后,播放列表将播放下一首歌曲。

输入是:

#!/usr/bin/python
#-*-coding:ascii-*-

import dbus
import gobject

from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()

banshee = bus.get_object('org.mpris.MediaPlayer2.banshee',
               '/org/mpris/MediaPlayer2')
iface = dbus.Interface(banshee,'org.mpris.MediaPlayer2.Player')

loop = gobject.MainLoop()
def on_reply():
        print"Start"
def on_error():
        print"Error"
def next_song():
        print"Next Song"
        iface.Next(reply_handler=on_reply,
        error_handler=on_error)
        gobject.timeout_add(4,next_song)
def on_error(error):
        print"Error"
        loop.quit()
        next_song()
try:
        loop.run()
finally:
        print"End"
        iface.Stop() 

输出:

先感谢您

4

3 回答 3

1

路径错了。正确的路径是:

banshee = bus.get_object("org.bansheeproject.Banshee", "/org/bansheeproject/Banshee/PlayerEngine")

下一页上,您将获得有关该路径及其工作原理的更多信息。

于 2012-10-26T08:56:20.357 回答
1

您可以使用d-feet查看该方法在您尝试使用的界面上是否可用。

您还可以使用dbus-monitor来查看总线上传递了哪些消息。语法应该是这样的:

dbus-monitor --monitor --address <your_bus_address>

您将使用上面的命令获得总线上的所有消息。要过滤,您可以执行以下操作:

dbus-monitor --monitor --address <your_bus_address> interface=<IF_name> path=<path_name> dest=...

您不能在过滤中使用部分接口/路径名称。您始终可以使用 grep 进行一些高级过滤。

如果该方法在该接口上不可用,或者您尝试使用错误的参数类型集调用它,您通常会收到此错误。在您的调用代码中检查函数签名。

于 2012-08-29T06:26:34.993 回答
1

mdbus2 应该给出可用方法的列表。取自此页面

$ mdbus2 org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2
...
[METHOD]    org.mpris.MediaPlayer2.Player.Pause() -> ()
[METHOD]    org.mpris.MediaPlayer2.Player.PlayPause() -> ()
[METHOD]    org.mpris.MediaPlayer2.Player.Stop() -> ()
[METHOD]    org.mpris.MediaPlayer2.Player.Play() -> ()
...

调整示例以反映您正在与 Banshee 交互的事实。我尝试安装 Banshee 和 mdbus2 自己尝试,但安装程序脚本失败。

您也可以尝试使用 Python 的内置工具进行自省。

$ python
>>> from org.mpris.MediaPlayer2 import Player
>>> dir(Player)

更好的是,在您的程序中删除类似的语句。您的代码体目前非常简单,您可以打印出 dir() 的结果。

finally:
    print"End"
    dir(iface)
    iface.Stop()
于 2012-08-29T03:45:22.437 回答