在媒体播放器中播放带有d-bus的音乐列表

时间:2012-08-28 18:12:15

标签: python dbus

这个python程序将播放Mediapplayer的播放列表。当一首歌曲结束或在键盘上打字后,播放列表将播放下一首歌曲。

输入为:

#!/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() 

输出: 没什么

提前谢谢

3 个答案:

答案 0 :(得分:1)

mdbus2应该提供可用方法的列表。取自this page

$ 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()

答案 1 :(得分: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=...

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

如果该方法在该接口上不可用,或者您尝试使用一组错误的参数类型调用它,通常会出现此错误。在您的主叫代码中也检查功能签名。

答案 2 :(得分:1)

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

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

在以下page上,您可以获得有关路径及其工作原理的更多信息。