2012-08-28 4 views
0

이 python 프로그램은 Mediapplayer에서 재생 목록을 재생해야합니다. 한 곡이 끝나거나 키보드에서 타이핑 한 후 재생 목록은 다음 곡을 재생합니다.MediaPlayer에서 d-bus로 음악 목록 재생

입력은 다음과 같습니다

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

출력 : 아무것도

이 가능한 방법의 목록을 제공해야한다 사전에

답변

1

경로가 잘못되었습니다. 올바른 경로는 다음과 같습니다

반시 = bus.get_object ("org.bansheeproject.Banshee", "/ 조직/bansheeproject/밴시/PlayerEngine") 다음 page

당신이 얻는 경로에 대한 자세한 정보와 어떻게 작동하는지.

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와 mdbus2를 직접 설치하려고 시도했지만 설치 프로그램 스크립트가 실패했습니다.

또한 내성을 위해 파이썬의 내장 도구를 사용해 볼 수도 있습니다.

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

더 나은 점은 프로그램에서 유사한 문구를 삭제하십시오. 코드 본문은 현재 dir()의 결과를 인쇄 할 수있을만큼 사소한 것입니다.

finally: 
    print"End" 
    dir(iface) 
    iface.Stop() 
+0

감사합니다. iface.Stop() 라인에 오류가 있습니다. Error-print는 Stop()이 알 수없는 메소드이고 "org.mpris.MediaPlayer2.Player"인터페이스가 존재하지 않는다고 알려줍니다. – Studie

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 할 수 있습니다.

해당 인터페이스에서 메서드를 사용할 수 없거나 잘못된 매개 변수 형식 집합을 사용하여 호출하려고하면 일반적으로이 오류가 발생합니다. 호출 코드에서 함수 서명을 확인하십시오.

+0

I dbus-monitor를 시도하고 많은 텍스트를 인쇄합니다. – Studie

+0

기본적으로 버스에서 진행되는 모든 작업이 인쇄됩니다. 메시지를 필터링 할 수 있습니다. 필터링하는 방법을 보여주기 위해 메시지를 편집했습니다. 관심있는 인터페이스를 사용하여 필터링해야합니다. –

+0

다음은 print : signal sender = org.freedesktop.DBus -> dest = : 1.166 serial = 2 path =/org/freedesktop/DBus; interface = org.freedesktop.DBus; member = NameAcquired string ": 1.166" – Studie