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