Проблема с видеофайлом класса AForge FileVideoSource

#c# #aforge

#c# #ошибка

Вопрос:

У меня возникла некоторая проблема с классом FileVideoSource в AForge nuget. В настоящее время я могу снимать изображение с камеры моего ноутбука и обнаруживать на нем движение. Теперь я хотел бы сделать то же самое, но используя видео из файла, но я не могу даже получить доступ к видео и показать его.

У меня есть следующий код:

 ...
private void button1_Click(object sender, EventArgs e)
{
   // var existTest = File.Exists("test.avi");
   var videoFile = new FileVideoSource("test.avi");
   videoFile.NewFrame  = new NewFrameEventHandler(video_NewFrame);
   videoFile.Start();
}

private void video_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
   var img = eventArgs.Frame;
   pictureBox1.Image = img;
}
  

После отладки я убедился, что файл был найден (проверено с помощью File.Метод Exists()) но после этого буквально ничего не происходит. Я попытался установить точку останова внутри video_NewFrame frame_eventhandler, но она так и не была достигнута.

Я также пробовал файл .mpg вместо .avi. Та же ситуация. Я могу воспроизводить оба видеофайла с помощью WMP, поэтому я думаю, что это не проблема с кодеком. Оба видеофайла хранятся в моей выходной папке отладки.

Кто-нибудь может мне помочь?

Ответ №1:

У меня была точно такая же проблема. Оказывается, виновником были кодеки. Попробуйте загрузить их с https://www.codecguide.com/download_k-lite_codec_pack_mega.htm

Моим первым шагом (ну, не совсем первым :)) был захват ошибок видео:

 fileVideo.VideoSourceError  = new VideoSourceErrorEventHandler(videoSource_Error);
  

и

         private void videoSource_Error(object sender, VideoSourceErrorEventArgs eventArgs)
        {
            Console.WriteLine(eventArgs.Description);
        }
  

Я получил сообщение «Не найден приемлемый вывод выходного видео в данном источнике», затем я установил кодеки, и теперь видео воспроизводится.