AForge.NET: метод аргумента NewFrameEventHandler не запущен

Я пытаюсь написать программу консоли Windows, которая способна получать изображения с веб-камеры или виртуальной веб-камеры, извлекать кадр растрового изображения из источника видео и сохранять кадр в файловой системе как файл растрового изображения.

В настоящее время я использую программу под названием OBS Studio для имитации видеоисточника с опцией «Виртуальная камера».

Вот код:

      using System;
using AForge.Video.DirectShow;
using AForge.Video;
using System.Drawing;

namespace webcamc
{
    class Program
    {
        FilterInfoCollection filterInfoCollection;
        VideoCaptureDevice videoCaptureDevice;
        Bitmap bitmap;

        static void Main(string[] args)
        {
            var program = new Program();
            program._init();
        }

        void _handleNewFrameEvent(object sender, NewFrameEventArgs eventArgs)
        {
            bitmap = new Bitmap(eventArgs.Frame);
        }

        void _init()
        {
            filterInfoCollection = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            videoCaptureDevice = new VideoCaptureDevice(filterInfoCollection[0].MonikerString);
            videoCaptureDevice.Start();
            videoCaptureDevice.NewFrame += new NewFrameEventHandler(_handleNewFrameEvent);
           
            string ActiveDir = AppDomain.CurrentDomain.BaseDirectory;
            string filepath = System.IO.Path.Combine(ActiveDir, @"C://Pic");

            string fileName = System.IO.Path.Combine(filepath, @"name.bmp");
            bool fileNotExists = !System.IO.File.Exists(fileName);
            if (fileNotExists)
            {
               bitmap.Save(fileName);
            }

        }

    }
}

К сожалению, я не могу понять, почему _handleNewFrameEvent метод, который я передаю NewFrameEventHandlerне срабатывает; Я проверил код с помощью отладчика, и точка останова не сработала. Я совершенно уверен, что список устройств и прозвище устройства получены правильно. Однако я очень сомневаюсь videoCaptureDeviceпример. Я не уверен , но, похоже , это не правильно , так как экземпляр все относящиеся значения кажутся 0.

Вот изображение отладчика, показывающее плохо созданное устройство видеозахвата.

Может ли кто-нибудь указать мне правильное направление?

Спасибо.

1 ответ

я бы сначала переехал videoCaptureDevice.Start();ниже videoCaptureDevice.NewFrame += new NewFrameEventHandler(_handleNewFrameEvent);поскольку вы хотите запустить передачу с камеры только после того, как сможете получать новые кадры (но я не уверен, что это решит вашу проблему).

Возможно, при запуске веб-камеры возникает ошибка, поэтому добавление vDevIn.VideoSourceError += new VideoSourceErrorEventHandler(errorHandler)и посмотрите, есть ли какая-либо ошибка, вызванная использованием функции ниже:

          private void errorHandler(object sender, VideoSourceErrorEventArgs eventArgs)
{
    Console.WriteLine("Video feed source error: " + eventArgs.Description);
}
Другие вопросы по тегам