Тип обратного вызова VLC Python EventManager? - PullRequest
12 голосов
/ 29 августа 2010

У меня проблемы с подключением обработчика событий, чтобы сообщить, когда песня закончилась, когда используются привязки 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 ]

9 голосов
/ 30 августа 2010

Обнаружил, что 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)

7 голосов
/ 23 апреля 2016

Вот базовый код для более свежего 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
...