VLC Python EventManager callback type?

后端 未结 2 1116
无人共我
无人共我 2020-12-30 04:53

I\'m having trouble attaching an event handler to tell when a song has finished playing when using the VLC Python bindings. The event_attach function is complaining about th

相关标签:
2条回答
  • 2020-12-30 05:30

    Here is basic code for the more recent vlc.py using the event_manager:

    import vlc
    import time
    import sys
    
    finish = 0
    
    def SongFinished(event):
        global finish
        print("\nEvent reports - finished")
        finish = 1
    
    def pos_callback(event, player):
        sec = player.get_time() / 1000
        m, s = divmod(sec, 60)
        npos = event.u.new_position * 100
        sys.stdout.write('\r%s %02d:%02d (%.2f%%)' % ('Position', m, s, npos))
        sys.stdout.flush()
    
    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)
    events.event_attach(vlc.EventType.MediaPlayerPositionChanged, pos_callback, player)
    
    player.play()
    while finish == 0:
        time.sleep(0.5)
    

    Note: there are quite a few events for the media player that can be monitored in this way.

    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    
    

    For the full current list, search for class EventType in the code at
    https://github.com/oaubert/python-vlc/blob/master/generated/3.0/vlc.py

    0 讨论(0)
  • 2020-12-30 05:39

    Found it, VLC.py includes a small decorator ctypes function for wrapping callbacks:

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

    To use:

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

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

    0 讨论(0)
提交回复
热议问题