C# directshow调用摄像头录像
要在C#中使用DirectShow调用摄像头录像,你可以按照以下步骤进行操作:
- 首先,你需要添加对DirectShow库的引用。右键点击项目,选择“添加引用”,然后在“COM”选项卡中找到并选择“DirectShow”。
- 创建一个FilterGraph对象,这是DirectShow中的核心对象,用于管理过滤器图形。
FilterGraph graph = new FilterGraph();
- 使用FilterGraph对象创建一个CaptureGraphBuilder2对象,用于构建捕获图形。
ICaptureGraphBuilder2 captureGraphBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
captureGraphBuilder.SetFiltergraph(graph);
- 枚举系统中的视频输入设备(摄像头),并选择你想要使用的设备。你可以使用DirectShow的VideoInputDevices类来完成此操作。
VideoInputDevices devices = new VideoInputDevices();
VideoInputDevice device = devices[0]; // 选择第一个设备
- 使用FilterGraph对象创建一个设备过滤器,该过滤器将视频输入设备连接到图形中。
IBaseFilter deviceFilter = device.CreateFilter();
graph.AddFilter(deviceFilter, "Video Capture");
- 枚举设备过滤器的输出引脚,并选择一个输出引脚。然后创建一个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);
- 设置SampleGrabber过滤器的回调函数,以便在接收到视频样本时进行处理。你需要实现ISampleGrabberCB接口,并将其设置为SampleGrabber过滤器的回调。
ISampleGrabber sampleGrabber = (ISampleGrabber)sampleGrabberFilter;
sampleGrabber.SetCallback(new SampleGrabberCallback(), 1);
- 运行图形,开始捕获视频。
IMediaControl mediaControl = (IMediaControl)graph;
mediaControl.Run();
这样,你就可以使用DirectShow来调用摄像头录像了。你可以根据需要对视频进行处理,例如保存到文件或进行实时显示
原文地址: https://www.cveoy.top/t/topic/iKmU 著作权归作者所有。请勿转载和采集!