c# - 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。
谁能指出我正确的方向?
谢谢你。
解决方案
我将首先移动videoCaptureDevice.Start();
到下方 videoCaptureDevice.NewFrame += new NewFrameEventHandler(_handleNewFrameEvent);
,因为您只想在收到新帧后开始运行相机源(但我不相信这会解决您的问题)。
网络摄像头启动可能会引发错误,因此添加 avDevIn.VideoSourceError += new VideoSourceErrorEventHandler(errorHandler)
并查看使用以下函数是否引发任何错误:
private void errorHandler(object sender, VideoSourceErrorEventArgs eventArgs)
{
Console.WriteLine("Video feed source error: " + eventArgs.Description);
}
推荐阅读
- reactjs - react中的render()方法什么时候被调用
- perl - 如何在 Perl 中扩展像 nm 这样的范围?
- azure - Azure DSC 配置问题
- java - 使用 META-INF\services 为 Jboss 模块扩展创建 jar
- generics - 除了上限之外,Kotlin 是否有任何通用约束?
- python - Django REST - 元数据中 ForeignKey 相关模型的 URL(选项)
- sas - if 子句中的日期时间比较
- clickonce - ClickOnce:无法下载应用程序
- python - 硒 python link_text.click()
- postgresql - 如何在 Sequelize 中实现 JOIN