C#结合AForge实现摄像头录像
作者:asml 发布时间:2021-06-28 03:53:51
标签:C#,摄像头录像
输出为MP4需要用到ffmpeg相关的文件,我打包的库已经带了,去官网找的库可以在这个目录找到:
2:
添加这些引用:
3:
两个全局变量:
//用来操作摄像头
private VideoCaptureDevice Camera = null;
//用来把每一帧图像编码到视频文件
private VideoFileWriter VideoOutPut = new VideoFileWriter();
开始代码:
//获取摄像头列表
var devs = new FilterInfoCollection(FilterCategory.VideoInputDevice);
//实例化设备控制类(我选了第1个)
Camera = new VideoCaptureDevice(devs[0].MonikerString);
//配置录像参数(宽,高,帧率,比特率等参数)VideoCapabilities这个属性会返回摄像头支持哪些配置,从这里面选一个赋值接即可,我选了第1个
Camera.VideoResolution = Camera.VideoCapabilities[0];
//设置回调,aforge会不断从这个回调推出图像数据
Camera.NewFrame += Camera_NewFrame;
//打开摄像头
Camera.Start();
//打开录像文件(如果没有则创建,如果有也会清空),这里还有关于
VideoOutPut.Open("E:/VIDEO.MP4",
Camera.VideoResolution.FrameSize.Width,
Camera.VideoResolution.FrameSize.Height,
Camera.VideoResolution.AverageFrameRate,
VideoCodec.MPEG4,
Camera.VideoResolution.BitCount);
给AForge输出图像数据的回调方法:
//图像缓存
private Bitmap bmp = new Bitmap(1, 1);
//摄像头输出回调
private void Camera_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
//写到文件
VideoOutPut.WriteVideoFrame(eventArgs.Frame);
lock (bmp)
{
//释放上一个缓存
bmp.Dispose();
//保存一份缓存
bmp = eventArgs.Frame.Clone() as Bitmap;
}
}
结束代码:
//停摄像头
Camera.Stop();
//关闭录像文件,如果忘了不关闭,将会得到一个损坏的文件,无法播放
VideoOutPut.Close();
4:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
</startup>
<supportedRuntime version="v2.0.50727"/>
</configuration>
来源:http://www.cnblogs.com/DragonStart/p/7563351.html


猜你喜欢
- Kotlin简介Kotlin是一种针对Java 平台的新编程语言。Kotlin简洁、安全、务实,并且专注于与Java代码的互操作性。它几乎可
- 在日常开发中,可能会遇到同一份代码,需要根据运营需求打出不同包名、不同图标、不同名称的Apk,发布到不同的渠道中。Android Studi
- 最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指
- BottomNavigationView 很早之前就在 Material Design 中出现了,但是直到 Android Support
- 概述线上项目发布一般有以下几种方案:机发布蓝绿部署滚动部署灰度发布停机发布 这种发布一般在夜里或者进行大版本升级的时候发布,因为需要停机,所
- 项目中很多时候需要读取自定义配置文件,本地开发工具怎么写都成功但是部署到服务其上就出现问题,异常BOOT-INF/classes!/conf
- java list,set,map,数组间的相互转换详解1.list转setSet set = new HashSet( new Array
- 在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Microsoft .Net Framework的
- 前言:发送邮件,肯定是每个公司都会有的基本业务。很多公司都会选择把发送邮件作为一个基础服务,对外提供接口。直接调用就可发邮件了。但是我们都知
- 本文实例讲述了使用SAX来解析XML。通常来说在Android里面可以使用SAX和DOM,DOM需要把整个XML文件读入内存再解析,比较消耗
- 首先分析一下问题:其实这个红框不是android的bug,把编译模式从eng改成user就可以了,红框只是eng模式debug的时候提示你系
- Autowired有两种注入方式by typeby name默认使用的是byType的方式向Bean里面注入相应的Bean。例如:@Auto
- 1.前言在Mybatis中需要创建的配置文件有sqlMapconfig.xml,映射文件xxxMapper.xml,而这些文件在idea中并
- 本文为大家分享了实现断点续传下载的具体代码,供大家参考,具体内容如下1、基于Ok+Rxjava实现断点续传下载2、基于Ok+Rxjava+R
- 方式一:在所有mapper接口使用@Mapper注解@Mapper(将包中的所有接口都标注为DAO层接口)public interface
- 前几天的一个晚上突然想到微信红包应该有一个随机算法,就自己试着写了下,也不知道对不对,看了看网上的说法,好像到现在为止官方也没有给出一个确切
- 本文实例分析了C#泛型用法。分享给大家供大家参考。具体分析如下:这里演示如何创建具有单个类型参数的自定义泛型列表类,以及如何实现 IEnum
- 注入集合(数组、List、Map、Set)类型属性(1)创建类,定义数组,list,map,set类型属性,并且生成对应的set方法。(2)
- 前言有时候我们开发时会发现有些方法调用非常多,但它的默认的调用方法却要传很多参数进去而且还得记得调用具体的写法,比如Toast,不止要调用m
- 一:背景1. 讲故事高级语言玩多了,可能很多人对指针或者汇编都淡忘了,本篇就和大家聊一聊指针,虽然C#中是不提倡使用的,但你能说指针在C#中