要在 C# 中使用 DirectShow 调用摄像头录像,你可以按照以下步骤进行操作:

  1. 首先,你需要添加对 DirectShow 库的引用。右键点击项目,选择'添加引用',然后在'COM'选项卡中找到并选择'DirectShow'。
  2. 创建一个 FilterGraph 对象,这是 DirectShow 中的核心对象,用于管理过滤器图形。
FilterGraph graph = new FilterGraph();
  1. 使用 FilterGraph 对象创建一个 CaptureGraphBuilder2 对象,用于构建捕获图形。
ICaptureGraphBuilder2 captureGraphBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
captureGraphBuilder.SetFiltergraph(graph);
  1. 枚举系统中的视频输入设备(摄像头),并选择你想要使用的设备。你可以使用 DirectShow 的 VideoInputDevices 类来完成此操作。
VideoInputDevices devices = new VideoInputDevices();
VideoInputDevice device = devices[0]; // 选择第一个设备
  1. 使用 FilterGraph 对象创建一个设备过滤器,该过滤器将视频输入设备连接到图形中。
IBaseFilter deviceFilter = device.CreateFilter();
graph.AddFilter(deviceFilter, 'Video Capture');
  1. 枚举设备过滤器的输出引脚,并选择一个输出引脚。然后创建一个 SampleGrabber 过滤器,将其添加到图形中,并将其连接到设备过滤器的输出引脚。
IPin outputPin = deviceFilter.GetPin('Capture');
IBaseFilter sampleGrabberFilter = (IBaseFilter)new SampleGrabber();
graph.AddFilter(sampleGrabberFilter, 'Sample Grabber');
IPin inputPin = DirectShowUtils.GetPin(sampleGrabberFilter, 'Input', PinDirection.Input);
captureGraphBuilder.RenderStream(null, null, outputPin, null, sampleGrabberFilter);
  1. 设置 SampleGrabber 过滤器的回调函数,以便在接收到视频样本时进行处理。你需要实现 ISampleGrabberCB 接口,并将其设置为 SampleGrabber 过滤器的回调。
ISampleGrabber sampleGrabber = (ISampleGrabber)sampleGrabberFilter;
sampleGrabber.SetCallback(new SampleGrabberCallback(), 1);
  1. 运行图形,开始捕获视频。
IMediaControl mediaControl = (IMediaControl)graph;
mediaControl.Run();

这样,你就可以使用 DirectShow 来调用摄像头录像了。你可以根据需要对视频进行处理,例如保存到文件或进行实时显示。

C# DirectShow 摄像头录像教程

原文地址: https://www.cveoy.top/t/topic/qqBE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录