C# DirectShow 摄像头录像教程 - 详细步骤指南
要使用 DirectShow 调用摄像头录像,你可以按照以下步骤进行操作:
-
引用 DirectShow 库:在 Visual Studio 中,右键单击项目,选择'管理 NuGet 程序包',然后搜索并安装 DirectShow 库。
-
创建 DirectShow Graph:使用 DirectShow 库创建一个 FilterGraph 对象,这将用于连接摄像头和录像机。
using DirectShowLib;
// 创建 FilterGraph 对象
FilterGraph graphBuilder = new FilterGraph();
- 查找摄像头设备:使用 DirectShow 库查找可用的摄像头设备,并获取其设备路径。
DsDevice[] devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
if (devices.Length > 0)
{
// 获取设备路径
string devicePath = devices[0].DevicePath;
}
- 添加摄像头到 Graph:使用摄像头设备路径创建一个 CaptureGraphBuilder2 对象,并将其添加到 FilterGraph 中。
ICaptureGraphBuilder2 captureGraphBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();
// 将 CaptureGraphBuilder2 对象添加到 FilterGraph
captureGraphBuilder.SetFiltergraph(graphBuilder);
captureGraphBuilder.RenderStream(PinCategory.Capture, MediaType.Video, sourceFilter, null, null);
- 创建录像机 Filter:使用 DirectShow 库创建一个 FileWriterFilter 对象,用于将摄像头视频流保存为视频文件。
IBaseFilter fileWriterFilter = (IBaseFilter)new FileWriter();
// 将 FileWriterFilter 对象添加到 FilterGraph
graphBuilder.AddFilter(fileWriterFilter, 'File Writer');
- 设置录像输出文件:通过调用 FileWriterFilter 的 SetFileName 方法设置录像输出文件的路径。
IFileSinkFilter fileSinkFilter = (IFileSinkFilter)fileWriterFilter;
fileSinkFilter.SetFileName(outputFile, null);
- 连接 Filter:使用 DirectShow 库连接摄像头 Filter 和录像机 Filter。
graphBuilder.Connect(sourceFilterOutputPin, fileWriterFilterInputPin);
- 开始录像:通过调用 CaptureGraphBuilder2 的 ControlStream 方法开始录像。
captureGraphBuilder.ControlStream(PinCategory.Capture, DsGuid.TimeFormatNone, sourceFilter, null, null, 0, 0);
- 停止录像:通过调用 CaptureGraphBuilder2 的 ControlStream 方法停止录像。
captureGraphBuilder.ControlStream(PinCategory.Capture, DsGuid.TimeFormatNone, sourceFilter, null, null, 0, 1);
以上就是使用 DirectShow 调用摄像头录像的基本步骤。你可以根据自己的需要进行修改和扩展。请注意,DirectShow 库在现代的 Windows 平台上已经过时,建议使用更现代的 API,如 Media Foundation 来处理摄像头录像。
原文地址: https://www.cveoy.top/t/topic/qqSf 著作权归作者所有。请勿转载和采集!