Используя библиотеку VLC, предоставляемую Vlc.DotNet, я попытался реализовать ее в простом WPF.Directory Not Found Exception или FileNotFoundException на VLC.DotNet
Я скопировал именно код из репозитория и получил NuGet в Интернете, но, похоже, не может заставить его работать. Я получаю исключение Directory Not Found прямо из загрузки файла на диск.
Вот мой код:
public MainWindow()
{
InitializeComponent();
VLCControl.MediaPlayer.VlcLibDirectoryNeeded += OnVlcControlNeedsLibDirectory;
}
private void OnVlcControlNeedsLibDirectory(object sender, Vlc.DotNet.Forms.VlcLibDirectoryNeededEventArgs e)
{
var currentAssembly = Assembly.GetEntryAssembly();
var currentDirectory = new FileInfo(currentAssembly.Location).DirectoryName;
if (currentDirectory == null)
return;
if (AssemblyName.GetAssemblyName(currentAssembly.Location).ProcessorArchitecture == ProcessorArchitecture.X86)
e.VlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine(currentDirectory, @"..\..\..\lib\x86\"));
else
e.VlcLibDirectory = new DirectoryInfo(System.IO.Path.Combine(currentDirectory, @"..\..\..\lib\x64\"));
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var d = new Microsoft.Win32.OpenFileDialog();
d.Multiselect = false;
if (d.ShowDialog() == true)
{
Uri src = new Uri(d.FileName);
VLCControl.MediaPlayer.Play(src); //Exception here
}
}
VLCControl является контроль VLC в XAML.
Изменяя VlcLibDirectory
с другим путем, где я поставил библиотеки (например, корень приложения), я получаю эту StackTrace:
на Vlc.DotNet.Core.Interops.VlcInteropsManager..ctor (DirectoryInfo dynamicLinkLibrariesPath) на Vlc.DotNet.Core.Interops.VlcManager..ctor (DirectoryInfo dynamicLinkLibrariesPath) на Vlc.DotNet.Core.Interops.VlcManager.GetInstance (DirectoryInfo dynamicLinkLibrariesPath) в Vlc.DotNet.Core.VlcMediaPlayer..ctor (DirectoryInfo vlcLibDirectory) на Vlc.DotNet.Forms.VlcControl.EndInit() на Vl c.DotNet.Forms.VlcControl.Play (Uri uri, String []) в VLCTest.MainWindow.Button_Click (отправитель объекта, RoutedEventArgs e) в c: \ Users \ ME \ Documents \ Visual Studio 2013 \ Projects \ VLCTest \ VLCTest \ MainWindow.xaml.cs: Ligne 56
код становится:
if(AssemblyName.GetAssemblyName(currentAssembly.Location).ProcessorArchitecture == ProcessorArchitecture.X86)
e.VlcLibDirectory = new DirectoryInfo(currentDirectory);
else
e.VlcLibDirectory = new DirectoryInfo(currentDirectory);
Спасибо за вашу помощь.
ли вы начать это с VS? Исходя из currentDirectory, есть папка x86 или x64 (".. \ .. \ .. \ lib \ x86 \") – Jehof
@Default Это действительно так, потому что это путь из файла, который вы получаете из FileDialog. @Jehof, Исключение происходит, когда файл загружается, а не сам плеер. Игрок действительно получает хороший путь для 'VlcLibDirectory' (я думаю?), Благодаря библиотеке – JoJoeTheBear
@Jehof Извините за двойной комментарий. Да в VS. – JoJoeTheBear