I have incorporated ActiveX VLC pligin to WPF application. 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 。所以我正在试验事件,看看我可以用哪些来达到目标。
任何线索为什么会这样?
P.S。此链接也无法帮助VLC player event catch
答案 0 :(得分:4)
我不认为你做错了什么。它似乎;由于某种原因(即使在最新版本的activeX中),这些事件未实现(或未实现)。我read这些事件在某些浏览器插件版本中要么太多或根本没有触发。
然而,它仍然有3个有用的和有用的活动,你可以指望
活动开火: playEvent
,pauseEvent
和stopEvent
事件未触发:以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()
的地方。请事先检查网址是否有效(也不要忘记在最近版本的插件中包含文件路径前面的"file:///"
)。只有当捕获的错误不是关于不存在的文件或无效路径等时,才重新应用videoURL(如你所愿)。
OR 您可以尝试其他包装器/自定义库:
答案 1 :(得分:0)
不应该是这样的:
vlc.MediaPlayerEncounteredError += new MediaPlayerEncounteredErrorEventHandler(vlc_MediaPlayerEncounteredError);
答案 2 :(得分:0)