VLC Python EventManager回调类型?

时间:2010-08-29 16:51:09

标签: python vlc libvlc

在使用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

错误:

self.vlc_events.event_attach(vlc.EventType.MediaPlayerEndReached, self.SongFinished, 1)
return libvlc_event_attach(self, i_event_type, f_callback, user_data)
    ArgumentError: argument 3: <type 'exceptions.TypeError'>: wrong type

2 个答案:

答案 0 :(得分:9)

找到它,VLC.py包含一个用于包装回调的小装饰器ctypes函数:

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

使用:

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

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

答案 1 :(得分:6)

以下是使用vlc.py的最新event_manager的基本代码:

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)

注意:媒体播放器有很多可以通过这种方式监控的事件。

MediaPlayerMediaChanged
MediaPlayerNothingSpecial
MediaPlayerOpening
MediaPlayerBuffering
MediaPlayerPlaying
MediaPlayerPaused
MediaPlayerStopped
MediaPlayerForward
MediaPlayerBackward
MediaPlayerEndReached
MediaPlayerEncounteredError
MediaPlayerTimeChanged
MediaPlayerPositionChanged
MediaPlayerSeekableChanged
MediaPlayerPausableChanged
MediaPlayerTitleChanged
MediaPlayerSnapshotTaken
MediaPlayerLengthChanged
MediaPlayerVout
MediaPlayerScrambledChanged
MediaPlayerESAdded
MediaPlayerESDeleted
MediaPlayerESSelected
MediaPlayerCorked
MediaPlayerUncorked
MediaPlayerMuted
MediaPlayerUnmuted
MediaPlayerAudioVolume
MediaPlayerAudioDevice