#c# #aforge
#c# #aforge
Вопрос:
Я хотел бы одновременно записывать видео с двух веб-камер. Я использую Aforge.Видео.Пакет DirectShow для захвата каждого кадра из веб-игр. Я начал с примера, показанного на их веб-сайте, и просто добавил вторую камеру.
Но проблема, с которой я сталкиваюсь, заключается в том, что запускается только один из обработчиков событий для обработки новых кадров. В приведенном ниже примере кода это _NewFrameHandler2.
У меня такое чувство, что я упускаю здесь что-то очевидное…
public class Camera
{
private VideoCaptureDevice objCamera1;
private VideoCaptureDevice objCamera2;
public void Start()
{
FilterInfoCollection objVideoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
objCamera1 = new VideoCaptureDevice(objVideoDevices[0].MonikerString);
objCamera2 = new VideoCaptureDevice(objVideoDevices[1].MonikerString);
objCamera1.VideoResolution = objCamera1.VideoCapabilities[objCamera1.VideoCapabilities.Count() - 1];
objCamera2.VideoResolution = objCamera2.VideoCapabilities[objCamera2.VideoCapabilities.Count() - 1];
objCamera1.NewFrame = new NewFrameEventHandler(_NewFrameHandler1);
objCamera2.NewFrame = new NewFrameEventHandler(_NewFrameHandler2);
objCamera1.Start();
objCamera2.Start();
}
public void Stop()
{
objCamera1.Stop();
objCamera2.Stop();
}
private void _NewFrameHandler1(object sender, NewFrameEventArgs eventArgs)
{
Bitmap objFrame = (Bitmap)eventArgs.Frame;
Console.WriteLine("1");
}
private void _NewFrameHandler2(object sender, NewFrameEventArgs eventArgs)
{
Bitmap objFrame = (Bitmap)eventArgs.Frame;
Console.WriteLine("2");
}
}
Комментарии:
1. Возможно, вы захотите изучить TPL / многозадачность. Это может быть проблема с потоками.
2. Спасибо за отзыв @Kixoka Я еще немного поэкспериментировал и обнаружил, что функция objCamerax.Start() определяет, какой обработчик событий выполняется. Последний запущенный — это тот, который на самом деле запущен. Так что, похоже, это проблема с пакетом Aforge, возможно. Я заглянул в функцию Start(), и все, что они там делают, это запускают новый поток, который затем считывает кадры с камеры.
3. К вашему сведению, AForge больше не поддерживается и был поглощен проектом Accord. По сути, это обычная замена (хотя, конечно, пространства имен изменились).
4. Спасибо за информацию, Эми, я перенес ее в Accord!
Ответ №1:
Я думаю, что я понял это. Я добавил задержку в 500 мс между вызовом .Функция Start() для объектов camera.
System.Threading.Thread.Sleep(500);
Теперь это работает.
Комментарии:
1. Вы можете принять свой собственный ответ, чтобы закрыть его. Ну, на самом деле он не совсем закрыт, но люди видят, что на него был дан ответ.