Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ActiveX VLC播放器事件不工作_C#_.net_Wpf_Activex_Vlc - Fatal编程技术网

C# ActiveX VLC播放器事件不工作

C# ActiveX VLC播放器事件不工作,c#,.net,wpf,activex,vlc,C#,.net,Wpf,Activex,Vlc,VLC插件工作正常 AxVLCPlugin vlc = new AxVLCPlugin(); vlc.MediaPlayerEncounteredError += vlc_MediaPlayerEncounteredError; vlc.MediaPlayerOpening += vlc_MediaPlayerOpening; vlc.MediaPlayerBuffering += vlc_MediaPlayerBuffering; vlc.MediaPlayerEndReached +=

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。因此,我正在对这些事件进行实验,看看我可以使用哪些事件来实现这一目标

有什么线索吗


另外,这个链接也没用,是不是应该是这样的:

vlc.MediaPlayerEncounteredError += new MediaPlayerEncounteredErrorEventHandler(vlc_MediaPlayerEncounteredError);

我不认为你做错了什么。看来,;由于某种原因(即使是在最新版本的activeX中),这些事件没有实现(或未实现)。我发现这些事件要么太多bug,要么在一些浏览器插件版本中根本没有触发

但是,它仍然有3个有用且有效的事件可供您参考。
事件触发:
播放事件
暂停事件
停止事件

未触发的事件:所有以
MediaPlayer
开头的事件

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

axvlcpluginvlc;
公共主窗口()
{
初始化组件();
vlc=新的AxVLCPlugin();
windowsFormsHost1.Child=vlc;
vlc.pauseEvent+=新事件处理程序(vlcu pauseEvent);
vlc.playEvent+=新事件处理程序(vlc_playEvent);
vlc.stopEvent+=新的事件处理程序(vlc_stopEvent);
}
void vlc_播放事件(对象发送方,事件参数e)
{
Debug.WriteLine(“playEvent fired!”);
}
void vlc_pauseEvent(对象发送方,事件参数e)
{
Debug.WriteLine(“pauseEvent已激发!”);
}
void vlc_stopEvent(对象发送方,事件参数e)
{
Debug.WriteLine(“stopEvent已激发!”);
}
私有无效按钮1\u单击(对象发送者,路由目标)
{
OpenFileDialog ofd=新建OpenFileDialog();
ShowDialog();
如果(ofd.FileName!=“”)
{
Debug.WriteLine(ofd.FileName);
addTarget(“文件://“+ofd.FileName,null,AXVLC.VLCPlaylistMode.VLCPlayListReplaceAndGo,0);
vlc.play();
}
}
但是,这些事件不会通知您任何流错误。在我看来,你唯一能做的就是;在执行
vlc.addTarget(…)
vlc.play()
的地方尝试catch。事先检查URL是否有效(也不要忘记在插件最新版本的文件路径前面包含
“file:///”
)。只有当捕获的错误不是关于不存在的文件或无效路径等时,才重新应用videoURL(如您所愿)

您可以尝试其他包装器/自定义库:


右键单击Design中的VLC→ 性质→ 事件(雷电图标)→ 在
mediaplayerdreached
中选择
axVLCPlugin21\u mediaplayerd

有关详细信息,请参见图像:


我认为您现在说得对,可能是的,他们将在更高版本的VLC ActiveX中实现这些事件。所以u won+++看来VLC ActiveX也是一个死项目,我猜是因为H.264标准占据了他的主导地位。有可能将VLC的运行实例绑定到这个ActiveX控件上吗?不,我不这么认为。