2015-04-08 2 views
0

Я использую библиотеку libvlc. И он работает хорошо, когда я воспроизвожу видеофайл, который я выбрал ранее в openFileDialog. Но моя цель - потоковое видео с веб-камеры и его просмотр.Windows Forms OpenFileDialog и LibVLC плагины dll ошибка точки входа

Я сделал видеоизображение на веб-камеру libvlc на экране, но когда я прокомментировал строку openFileDialog.Show() (мне больше не нужно), ошибка «Точка входа не найдена в библиотеке» Диалоги начали выходить для каждого плагина libvlc (в основном это DLL-файл).

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(); 
     } 
    } 

Я не вижу никаких отношений между OpenFileDialog и плагинами libvlc.

Что может вызвать такую ​​проблему?

EDITED:

После того как я пропустить все диалоговые окна ошибок, программа продолжает работать.

+0

Мой хрустальный шар говорит, что вы косвенно зависите от OpenFileDialog, изменяя Environment.CurrentDirectory. Вы должны скопировать все DLL-файлы плагина, которые libvlc использует в том же каталоге, что и ваш EXE. –

+0

@HansPassant libvlc.dll, libvlccore.dll и файлы плагинов находятся в том же каталоге, что и мой .exe. Я скопировал все из папки vlc player. И libvlc на самом деле работает (он отображает видео с камеры на экране), но сначала мне нужно пропустить все эти ошибки. –

ответ

0

Когда я использовал плеер VLC, он сделал дубликаты плагинов в папке «плагин». В моем приложении я использовал эти плагины и получал ошибки. После того, как я загрузил и распаковал новый экземпляр проигрывателя, я обнаружил, что дубликатов плагинов нет, поэтому я сделал вывод, что игрок делает копии плагинов при первом запуске (не тестировал). Когда я заменил свою папку плагина на новую, все ошибки исчезли.