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

  1. 引用 DirectShow 库:在 Visual Studio 中,右键单击项目,选择'管理 NuGet 程序包',然后搜索并安装 DirectShow 库。

  2. 创建 DirectShow Graph:使用 DirectShow 库创建一个 FilterGraph 对象,这将用于连接摄像头和录像机。

using DirectShowLib;

// 创建 FilterGraph 对象
FilterGraph graphBuilder = new FilterGraph();
  1. 查找摄像头设备:使用 DirectShow 库查找可用的摄像头设备,并获取其设备路径。
DsDevice[] devices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);

if (devices.Length > 0)
{
    // 获取设备路径
    string devicePath = devices[0].DevicePath;
}
  1. 添加摄像头到 Graph:使用摄像头设备路径创建一个 CaptureGraphBuilder2 对象,并将其添加到 FilterGraph 中。
ICaptureGraphBuilder2 captureGraphBuilder = (ICaptureGraphBuilder2)new CaptureGraphBuilder2();

// 将 CaptureGraphBuilder2 对象添加到 FilterGraph
captureGraphBuilder.SetFiltergraph(graphBuilder);
captureGraphBuilder.RenderStream(PinCategory.Capture, MediaType.Video, sourceFilter, null, null);
  1. 创建录像机 Filter:使用 DirectShow 库创建一个 FileWriterFilter 对象,用于将摄像头视频流保存为视频文件。
IBaseFilter fileWriterFilter = (IBaseFilter)new FileWriter();

// 将 FileWriterFilter 对象添加到 FilterGraph
graphBuilder.AddFilter(fileWriterFilter, 'File Writer');
  1. 设置录像输出文件:通过调用 FileWriterFilter 的 SetFileName 方法设置录像输出文件的路径。
IFileSinkFilter fileSinkFilter = (IFileSinkFilter)fileWriterFilter;
fileSinkFilter.SetFileName(outputFile, null);
  1. 连接 Filter:使用 DirectShow 库连接摄像头 Filter 和录像机 Filter。
graphBuilder.Connect(sourceFilterOutputPin, fileWriterFilterInputPin);
  1. 开始录像:通过调用 CaptureGraphBuilder2 的 ControlStream 方法开始录像。
captureGraphBuilder.ControlStream(PinCategory.Capture, DsGuid.TimeFormatNone, sourceFilter, null, null, 0, 0);
  1. 停止录像:通过调用 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 著作权归作者所有。请勿转载和采集!

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