当前位置: 首页 > news >正文

C#实现摄像头视频录制与保存

C#实现摄像头视频录制与保存,包含系统原生API和第三方库两种实现方式


一、使用Windows Media Capture API(原生方案)

using Windows.Media.Capture;
using Windows.Media.MediaProperties;
using Windows.Storage;
using System.Threading.Tasks;public class VideoRecorder
{private MediaCapture _mediaCapture;private StorageFile _outputFile;private bool _isRecording = false;// 初始化摄像头public async Task InitializeAsync(){_mediaCapture = new MediaCapture();var settings = new MediaCaptureInitializationSettings{StreamingCaptureMode = StreamingCaptureMode.Video};await _mediaCapture.InitializeAsync(settings);}// 开始录制public async Task StartRecordingAsync(string fileName){if (_isRecording) return;_outputFile = await KnownFolders.VideosLibrary.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);var encodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto);await _mediaCapture.StartRecordToStorageFileAsync(encodingProfile, _outputFile);_isRecording = true;}// 停止录制public async Task StopRecordingAsync(){if (!_isRecording) return;await _mediaCapture.StopRecordAsync();_isRecording = false;_mediaCapture.Dispose();}
}// 使用示例
var recorder = new VideoRecorder();
await recorder.InitializeAsync();
await recorder.StartRecordingAsync("my_video.mp4");
// 执行其他操作...
await recorder.StopRecordingAsync();

二、使用AForge.NET第三方库

using AForge.Video;
using AForge.Video.DirectShow;
using System.Drawing;
using System.IO;public class AForgeRecorder
{private VideoCaptureDevice _videoSource;private AVIWriter _aviWriter;private bool _isRecording = false;// 初始化摄像头public void Initialize(){FilterInfoCollection devices = new FilterInfoCollection(FilterCategory.VideoInputDevice);if (devices.Count == 0)throw new Exception("未检测到摄像头设备");_videoSource = new VideoCaptureDevice(devices[0].MonikerString);_videoSource.VideoResolution = _videoSource.VideoCapabilities[0]; // 选择最高分辨率}// 开始录制public void StartRecording(string fileName){_aviWriter = new AVIWriter("WMV", _videoSource.VideoResolution.FrameWidth,_videoSource.VideoResolution.FrameHeight);_videoSource.NewFrame += (sender, e) => {_aviWriter.WriteVideoFrame(e.Frame);};_videoSource.Start();_isRecording = true;}// 停止录制public void StopRecording(){if (!_isRecording) return;_videoSource.SignalToStop();_aviWriter.Close();_isRecording = false;}
}// 使用示例
var recorder = new AForgeRecorder();
recorder.Initialize();
recorder.StartRecording("recorded_video.avi");
// 执行其他操作...
recorder.StopRecording();

三、关键参数配置

参数项原生方案配置方法AForge方案配置方法
视频分辨率MediaCaptureInitializationSettings中的VideoDeviceControllerVideoCaptureDevice.VideoResolution
帧率MediaCaptureInitializationSettings中的MaxFrameRateVideoCaptureDevice.DefaultFrameRate
编码格式MediaEncodingProfile指定视频编码类型AVIWriter构造函数指定编码格式
保存路径KnownFolders指定系统文件夹自定义文件路径

四、高级功能实现

1. 实时预览窗口
// 原生方案预览
public async Task StartPreviewAsync()
{var previewWindow = new CaptureElement();previewWindow.Source = _mediaCapture;await _mediaCapture.StartPreviewAsync();
}// AForge方案预览
public void StartPreview(Control control)
{control.Controls.Add(new PictureBox {Image = _videoSource.GetCurrentVideoFrame(),Dock = DockStyle.Fill});
}
2. 视频压缩设置
// 原生方案H.264压缩
var profile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Highest);
profile.Video.Codec = VideoCodec.H264;// AForge方案调整码率
AVIWriter writer = new AVIWriter("WMV", width, height);
writer.VideoStreamInfo.Bitrate = 2000000; // 2Mbps

五、异常处理与资源管理

public class SafeRecorder : IDisposable
{private bool _disposed = false;// 原生方案资源释放public void Dispose(){if (!_disposed){_mediaCapture?.Dispose();_disposed = true;}}// AForge方案资源释放public void SafeStop(){try{_videoSource?.SignalToStop();_aviWriter?.Close();}catch (Exception ex){// 记录日志}}
}

参考代码 c#调用本地摄像头录制视频并保存 www.youwenfan.com/contentcsj/59163.html

六、完整项目结构

VideoRecorderApp/
├── src/
│   ├── VideoRecorder.sln
│   ├── NativeRecorder/ (原生方案实现)
│   │   ├── MainPage.xaml
│   │   └── VideoService.cs
│   └── AForgeRecorder/ (第三方方案实现)
│       ├── RecorderForm.cs
│       └── VideoProcessor.cs
├── assets/
│   └── default_icon.png
└── docs/└── 开发指南.md
http://www.dtcms.com/a/521038.html

相关文章:

  • 东莞网站建没可信网站是什么意思
  • led行业网站源码wordpress会员查看发布插件
  • 网站建设前期需要干嘛许昌网站建设哪家最好
  • 【Linux学习笔记】基于阻塞队列和环形队列的生产者消费者模型
  • GAN生成对抗网络学习-例子:生成逼真手写数字图
  • WPF MVVM下 ItemsControl条目命令绑定传参
  • 贵州网站制作公司电话wordpress有留言时邮件提醒
  • Python 脚本在工作日(周一到周五)的 8:00 到 19:00 之间持续运行,并在其他时间暂停(延时)
  • 婚庆网站大全深圳企业网站制作公司查询
  • 当城市有了“空间智能体”:一座长江首城的智慧蝶变
  • 机械类做的最好的网站网站开发代理江苏
  • 让别人做网站图片侵权网站简易后台
  • seo针对网站做策划大型网站开发合同
  • Macao资料生成程序,全新的UI 三端自适应PHP空间
  • 1Panel 安装与使用全指南:从部署到实战运维
  • Katalon Studio自愈测试功能
  • 非java、python、c/c++、perl、php、sql等的文章
  • 企业网站的建设与应用开题报告自己搭建app
  • 实验三:3-8线译码器设计
  • 深入浅出:马尔科夫链完全指南
  • 国外域名抢注网站seo顾问什么职位
  • 怎么做网站dns加速销售订单管理系统软件
  • DevOps工具链选型,Atlassian or TikLab哪一款更好用?
  • 网站实现搜索功能网站开发 平面设计
  • 河北建设厅官网站首页手机兼职有哪些
  • 【经典书籍】C++ Primer 第16章模板与泛型编程精华讲解
  • 做体育的网站网络推广优化是干啥的
  • 自己人网站建设网站推广策划方案大数据精准获客
  • Linux yum安装(安装docker)
  • AI未来--AI在制造业的最佳落地实践