2016-01-11 54 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) 

我知道這是舊的,但對於參考。