Dev*_*per 8 .net c# wpf 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();
Run Code Online (Sandbox Code Playgroud)
但有些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);
}
Run Code Online (Sandbox Code Playgroud)
他们没有开枪.(当然,我在这些方法中加入了断点.)
我真正需要的是捕获流错误并再次重新应用videoURL.所以我正在试验事件,看看我可以用哪些来达到目标.
任何线索为什么会这样?
PS此链接也无助于VLC播放器事件捕获
我不认为你做错了什么。它似乎; 这些事件由于某种原因没有实现(或未实现)(即使在最新版本的 activeX 中也是如此)。我读到这些事件要么有太多错误,要么在某些浏览器插件版本中根本不触发。
不过,它仍然有 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();
}
}
Run Code Online (Sandbox Code Playgroud)
不过,这些事件不会通知您任何流式传输错误。IMO,你唯一能做的就是;try-catch 执行vlc.addTarget(...)
and的位置vlc.play()
。事先检查 URL 是否有效(也不要忘记"file:///"
在最新版本的插件中包含文件路径)。仅当捕获的错误不是关于不存在的文件或无效路径等时,才重新应用 videoURL(如您所愿)。
或者您可以尝试其他一些包装器/自定义库:
归档时间: |
|
查看次数: |
6090 次 |
最近记录: |