C# Directshow 摄像头录像:使用示例代码
要在 C# 中调用摄像头进行录像,可以使用 DirectShow 库。以下是一个简单的示例代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DirectShowLib;
namespace DirectShowCameraCapture
{
class Program
{
static void Main(string[] args)
{
// 获取视频设备
DsDevice[] videoDevices = DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice);
if (videoDevices.Length == 0)
{
Console.WriteLine('No video devices found.');
return;
}
// 创建 FilterGraph 对象
IFilterGraph2 filterGraph = new FilterGraph() as IFilterGraph2;
// 创建 CaptureGraphBuilder2 对象
ICaptureGraphBuilder2 captureGraphBuilder = new CaptureGraphBuilder2() as ICaptureGraphBuilder2;
// 将 FilterGraph 与 CaptureGraphBuilder2 关联
int hr = captureGraphBuilder.SetFiltergraph(filterGraph);
if (hr < 0)
{
Console.WriteLine('Failed to set filter graph.');
return;
}
// 创建视频设备过滤器
Guid videoInputGuid = typeof(VideoInputDeviceCategory).GUID;
hr = captureGraphBuilder.RenderStream(ref videoInputGuid, ref MediaType.Video, videoDevices[0], null, null);
if (hr < 0)
{
Console.WriteLine('Failed to render video device.');
return;
}
// 创建 FileWriter 过滤器
IBaseFilter fileWriterFilter = Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid('E436EBB5-524F-11CE-9F53-0020AF0BA770'))) as IBaseFilter;
hr = filterGraph.AddFilter(fileWriterFilter, 'File Writer');
if (hr < 0)
{
Console.WriteLine('Failed to add file writer filter.');
return;
}
// 设置输出文件名
IFileSinkFilter fileSinkFilter = fileWriterFilter as IFileSinkFilter;
hr = fileSinkFilter.SetFileName('output.avi', null);
if (hr < 0)
{
Console.WriteLine('Failed to set output file name.');
return;
}
// 运行过滤图
IMediaControl mediaControl = filterGraph as IMediaControl;
hr = mediaControl.Run();
if (hr < 0)
{
Console.WriteLine('Failed to run filter graph.');
return;
}
Console.WriteLine('Press Enter to stop recording...');
Console.ReadLine();
// 停止过滤图
hr = mediaControl.Stop();
if (hr < 0)
{
Console.WriteLine('Failed to stop filter graph.');
return;
}
Console.WriteLine('Recording stopped.');
}
}
}
请注意,此示例代码仅演示了如何实现基本的录像功能。如果您需要更复杂的录像功能,例如设置视频分辨率、帧率等,请参考 DirectShow 文档以了解更多信息。
原文地址: https://www.cveoy.top/t/topic/qqOD 著作权归作者所有。请勿转载和采集!