Winforms Windows窗体OpenFileDialog和LibVLC插件dll入口点错误
我正在使用libvlc库。播放视频文件时效果很好,这是我在openFileDialog中选择的。但我的目标是从网络摄像头中播放视频并预览 我让libvlc在屏幕上显示网络摄像头视频,但当我注释掉openFileDialog.show()行(我不再需要该行)时,每个libvlc插件(基本上是一个.dll文件)的“在库中找不到入口点”错误对话框开始弹出 我看不到OpenFileDialog和libvlc插件之间的任何关系 什么会导致这样的问题 编辑:Winforms Windows窗体OpenFileDialog和LibVLC插件dll入口点错误,winforms,dll,openfiledialog,libvlc,entry-point,Winforms,Dll,Openfiledialog,Libvlc,Entry Point,我正在使用libvlc库。播放视频文件时效果很好,这是我在openFileDialog中选择的。但我的目标是从网络摄像头中播放视频并预览 我让libvlc在屏幕上显示网络摄像头视频,但当我注释掉openFileDialog.show()行(我不再需要该行)时,每个libvlc插件(基本上是一个.dll文件)的“在库中找不到入口点”错误对话框开始弹出 我看不到OpenFileDialog和libvlc插件之间的任何关系 什么会导致这样的问题 编辑: 跳过所有错误对话框后,程序继续工作。当我使用VL
跳过所有错误对话框后,程序继续工作。当我使用VLC player时,它在“plugin”文件夹中复制了插件。在我的应用程序中,我使用了这些插件,并且出现了错误。在我下载并解包了播放器的新实例之后,我发现没有插件的副本,所以我得出结论,当你第一次启动它时,播放器会复制插件(没有测试它)。
当我用新的插件文件夹替换插件文件夹时,所有错误都消失了。我的水晶球说,您间接依赖OpenFileDialog更改Environment.CurrentDirectory。您必须将libvlc使用的所有插件dll复制到与EXE相同的目录中。@HansPassant libvlc.dll、libvlccore.dll和plugins文件夹与my.EXE位于同一目录中。我复制了vlc播放器文件夹中的所有内容。libvlc实际上可以工作(它在屏幕上渲染摄像机的视频),但我必须先跳过所有这些错误。
private void btPlay_Click(object sender, EventArgs e)
{
/*
if (openFileDialog1.ShowDialog() != System.Windows.Forms.DialogResult.OK)
return;
* */
CleanUp();
string pluginPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "plugins");
string[] args = new string[]{
"--no-qt-error-dialogs",
"--ignore-config",
"--quiet",
"--plugin-path=" + pluginPath
};
//LibVlc initialization, that is where ERORR OCCURES
vlcInst = new VlcInstance(args);
/* Input media settings */
//VlcMedia media = new VlcMedia(vlcInst, openFileDialog1.FileName);
VlcMedia media = new VlcMedia(vlcInst, "dshow://");
LibVlc.libvlc_media_add_option(media.handle, "dshow-vdev=USB2.0 UVC VGA WebCam");
LibVlc.libvlc_media_add_option(media.handle, "dshow-adev=none");
/* Output media settings */
string[] outputOptions = new string[] {
"sout=#duplicate{",
"dst=",
"display",
",",
"dst=",
"'",
"transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100}",
":http{mux=ffmpeg{mux=flv},dst=:666/}",
"'",
"}"
};
LibVlc.libvlc_media_add_option(media.handle, String.Concat(outputOptions));
streamer = new VlcStreamer(media);
media.Dispose();
streamer.Drawable = mediaPanel.Handle;
streamer.Play();
}
private void CleanUp()
{
if (streamer != null)
{
streamer.Stop();
streamer.Dispose();
}
}