2016-01-11 26 views
0

我使用python脚本成功地使用libVLC播放视频,但是我需要实现event_ manager来识别&服务于玩家的事件。如何使用python实现LibVLC的事件管理器

我写了这样的代码如下:

import os 
import sys 
import vlc 

from vlc import EventType 

def video_end_reached(): 
    print "end_reached" 
    player.stop() 

if __name__ == '__main__': 
filepath = "D:\\CHANDU_DATA\\ADAS_Automation\\LibVLC\\video_Python\\KUK_iPod.mp4" 
movie = os.path.expanduser(filepath) 
#if 'http://' not in filepath: 
#if not os.access(movie, os.R_OK): 
    #print ('Error: %s file is not readable' % movie) 
    #sys.exit(1) 
instance = vlc.Instance("--sout=#duplicate{dst=display{audio}}") 
try: 
    media = instance.media_new(movie) 
except NameError: 
    print ('NameError: % (%s vs Libvlc %s)' % (sys.exc_info()[1], 
       vlc.__version__, vlc.libvlc_get_version())) 
    sys.exit(1) 

player = instance.media_player_new() 
event_manager = player.event_manager() 

player.set_media(media) 

player.play() 

event_manager.event_attach(EventType.MediaPlayerEndReached, video_end_reached) 

while(): 
    continue  

,但我试图执行此代码得到的错误,如:

Traceback (most recent call last): 
File "D:\CHANDU_DATA\ADAS_Automation\LibVLC\video_Python\video.py", line 33, in <module> 
event_manager.event_attach(EventType.MediaPlayerEndReached, video_end_reached) 
File "D:\CHANDU_DATA\ADAS_Automation\LibVLC\video_Python\vlc.py", line 1481, in event_attach 
raise VLCException("%s required: %r" % ('argument', callback)) 
VLCException: argument required: <function video_end_reached at 0x02DAECF0> 

请解释为什么这个错误发生&如何纠正它?任何人都可以提到如何使用python实现LibVLC的事件管理器?

+0

我发现它与用于LibVLC使用python脚本成功实施事件管理器: – chandu

+0

你是怎么事件监听器开火? 我遇到了麻烦。 event_m = m.event_manager() event_m_p = p.event_manager() #player event_m_p.event_attach(vlc.EventType.MediaPlayerTitleChanged,回调) 的#media event_m.event_attach(vlc.EventType.MediaMetaChanged,回调) 我有一个称为回调(e)的函数,但没有任何火灾发生。 介意你我正在播放收音机的pls文件。 – user1086377

回答

0

我认为ü忘了解决您的播放器 事件管理器通过event_attach方法来连接事件之前,你应该为事件管理器,它会接收和发送事件

my_event_manger = player.event_manager() 
my_event_manger.event_attach(EventType.MediaPlayerEndReached, video_end_reached) 

我知道这是旧的,但对于参考。