VLC Python事件管理器回调类型?

2024-10-01 11:25:47 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用VLC Python绑定时,我无法附加一个事件处理程序来判断歌曲何时结束播放。event_attach函数正在抱怨回调类型。在

def __init__(self):
    self.vlc = vlc.Instance()
    self.vlc_playlist = self.vlc.media_list_new()
    self.vlc_player = self.vlc.media_list_player_new()
    self.vlc_player.set_media_list(self.vlc_playlist)
    self.vlc_events = self.vlc_player.event_manager()
    self.vlc_events.event_attach(vlc.EventType.MediaPlayerEndReached, self.SongFinished, 1)
    ....
def SongFinished(self, *args, **kwargs):
    pass

错误:

^{pr2}$

Tags: selfevent处理程序newdef事件eventsmedia
2条回答

以下是最近使用event_managervlc.py的基本代码:

import vlc
finish = 0

def SongFinished(event):
    global finish
    print "Event reports - finished"
    finish = 1

instance = vlc.Instance()
player = instance.media_player_new()
media = instance.media_new_path('vp1.mp3') #Your audio file here
player.set_media(media)
events = player.event_manager()
events.event_attach(vlc.EventType.MediaPlayerEndReached, SongFinished)
player.play()
while finish == 0:
        sec = player.get_time() / 1000
        m, s = divmod(sec, 60)
        print "%02d:%02d" % (m,s)

注意:媒体播放器有很多事件可以通过这种方式进行监视。在

^{pr2}$

找到了,VLC.py公司包含用于包装回调的小decorator ctypes函数:

callbackmethod=ctypes.CFUNCTYPE(None, Event, ctypes.c_void_p)

使用:

@callbackmethod
def SongFinished(self, data):
    print data

.event_attach(vlc.EventType.MediaPlayerEndReached, SongFinished, 1)

相关问题 更多 >