ActiveX VLC播放器事件不起作用

我已将ActiveX VLC pligin合并到WPF应用程序中 。 VLC插件工作正常。

AxVLCPlugin vlc = new AxVLCPlugin(); vlc.MediaPlayerEncounteredError += vlc_MediaPlayerEncounteredError; vlc.MediaPlayerOpening += vlc_MediaPlayerOpening; vlc.MediaPlayerBuffering += vlc_MediaPlayerBuffering; vlc.MediaPlayerEndReached += vlc_MediaPlayerEndReached; // // Other code // like windowsFormsHost1.Child = vlc; and etc vlc.addTarget(videoURL, null, AXVLC.VLCPlaylistMode.VLCPlayListReplace, 1); vlc.play(); 

但是一些VLC的所有事件根本不起作用。

我的意思是这些事件:

 vlc.MediaPlayerEncounteredError += vlc_MediaPlayerEncounteredError; vlc.MediaPlayerOpening += vlc_MediaPlayerOpening; vlc.MediaPlayerBuffering += vlc_MediaPlayerBuffering; vlc.MediaPlayerEndReached += vlc_MediaPlayerEndReached; void vlc_MediaPlayerEndReached(object sender, EventArgs e) { Debug.WriteLine("[P] - StreamingVideo - END REACHED + " + DateTime.Now); } void vlc_MediaPlayerBuffering(object sender, DVLCEvents_MediaPlayerBufferingEvent e) { Debug.WriteLine("[P] - StreamingVideo - BUFFERING + " + DateTime.Now); } void vlc_MediaPlayerOpening(object sender, EventArgs e) { Debug.WriteLine("[P] - StreamingVideo - OPENING + " + DateTime.Now); } void vlc_MediaPlayerEncounteredError(object sender, EventArgs e) { Debug.WriteLine("[P] - StreamingVideo - ERROR + " + DateTime.Now); } 

他们没有开枪。 (当然,我在这些方法中加入了断点。)

我真正需要的是捕获流错误并再次重新应用videoURL 。 所以我正在试验事件,看看我可以用哪些来达到目标​​。

任何线索为什么会这样?

PS此链接也无助于VLC播放器事件捕获

我不认为你做错了什么。 它似乎; 由于某种原因(即使在最新版本的activeX中),这些事件未实现(或未实现)。 我已经读过这些事件要么太麻烦,要么在某些浏览器插件版本中根本没有触发。

但是,它仍然有3个有用的工作事件,你可以指望。
事件发射: playEventpauseEventstopEvent
事件未触发:所有以MediaPlayer开头的事件……

无论如何,下面的代码适用于我提到的事件:

  AxVLCPlugin vlc; public MainWindow() { InitializeComponent(); vlc = new AxVLCPlugin(); windowsFormsHost1.Child = vlc; vlc.pauseEvent += new EventHandler(vlc_pauseEvent); vlc.playEvent += new EventHandler(vlc_playEvent); vlc.stopEvent += new EventHandler(vlc_stopEvent); } void vlc_playEvent(object sender, EventArgs e) { Debug.WriteLine("playEvent fired!"); } void vlc_pauseEvent(object sender, EventArgs e) { Debug.WriteLine("pauseEvent fired!"); } void vlc_stopEvent(object sender, EventArgs e) { Debug.WriteLine("stopEvent fired!"); } private void button1_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); if (ofd.FileName != "") { Debug.WriteLine(ofd.FileName); vlc.addTarget("file:///" + ofd.FileName, null, AXVLC.VLCPlaylistMode.VLCPlayListReplaceAndGo, 0); vlc.play(); } } 

但是,这些事件不会通知您任何流错误。 国际海事组织,你唯一能做的就是; try-catch,执行vlc.addTarget(...)vlc.play() 。 检查URL是否有效(也不要忘记在文件路径的前面包含"file:///"和最新版本的插件)。 仅当捕获的错误与非现有文件或无效路径等无关时,重新应用videoURL(如您所愿)。

或者你可以尝试一些其他包装/自定义库:

  • 用于WinForm和WPF的VLC DotNet
  • 更多在此页面

不应该是这样的:

 vlc.MediaPlayerEncounteredError += new MediaPlayerEncounteredErrorEventHandler(vlc_MediaPlayerEncounteredError);