python-vlc
python-vlc copied to clipboard
MediaListEndReached event is never triggered
I've been testing media list events and found that MediaListEndReached
is never triggered. MediaListItemAdded
and MediaListItemDeleted
are triggered correctly, however.
To demonstrate the bug, here is a working example.
Can you please fix this event, as it is would be very useful.
import sys
import vlc
import tkinter as tk
import time
class Player:
def __init__(self, video=None, args=[]):
if (sys.platform.startswith('linux')):
args.append('--no-xlib')
self.vlc_instance = vlc.Instance(args)
self.medialist = self.vlc_instance.media_list_new()
self.mlplayer = self.vlc_instance.media_list_player_new()
self.player = self.mlplayer.get_media_player()
self.medialist.add_media(vlc.Media(video))
self.__set_gui()
self.__set_bindings()
def __set_gui(self):
self.root = tk.Tk()
self.root.minsize(width=800, height=450)
self.root.protocol('WM_DELETE_WINDOW', self.exit)
self.videopanel = tk.Frame(self.root)
self.canvas = tk.Canvas(self.videopanel, bg='red', highlightthickness=0)
self.canvas.pack(fill=tk.BOTH, expand=1)
self.videopanel.pack(fill=tk.BOTH, expand=1)
self.player.set_xwindow(self.videopanel.winfo_id())
self.root.update()
def __set_bindings(self):
self.root.bind('e', lambda event: self.exit())
def __callback(self, event):
print(event.type)
def start(self):
self.mlplayer.set_media_list(self.medialist)
self.mlplayer.play()
self.em = self.medialist.event_manager()
self.em.event_attach(vlc.EventType.MediaListEndReached, self.__callback)
self.root.mainloop()
def exit(self):
self.mlplayer.stop()
self.root.quit()
self.root.destroy()
player = Player(video='video.mp4', args=['--no-autoscale'])
player.start()