关于调用摄像头录像功能

news/2024/7/10 20:43:52 标签: ffmpeg

 

之前有说到用Aforge去调用笔记本上的自带摄像头进行拍照,然后我就想既然能拍照,那么应该也是可以录像,于是我就去百度了怎么实现这个功能。然后我在这里把我遇到的几个坑给说一哈。

首先第一个就是按着百度中别人的例子,发现我的项目中没有VideoFileWriter这个类,而别人的项目确有,然后我就看了一下aforge的版本,发现我用的版本比较早,所以我更新了新的2013年的aforge就有这个类了。我将新的aforge上传到网盘https://pan.baidu.com/s/1i5mmKlR

微云https://share.weiyun.com/73e88808612fc2ac523f76c49a79e8ea

第二个坑还是VideoFileWriter这个类,在new实例化的时候,报错,什么版本不兼容什么的,有两个需要改的,第一给就是将aforge文件里面的ffmpeg文件夹里面的dll放到项目的bin-》debug中,第二个是在项目右键属性

然后选择生成,将生成平台选择x86,因为我之前有改成x64,所以运行不了

 

第三个坑就是将从摄像头获取的图像写入到视频文件中,我当时是直接调用VideoFileWriter这个类实例化的对象,然后用里面的Open方法,将视频的路径,视频的分辨率,和视频的播放帧数传,视频的格式类型传进去,然后开始录,发现录完后视频只有几k的大小,打开后视频是黑的,然后就一直搞不懂是哪里出错了。跑回去看别人写好的代码是怎么录制的,发现他们里面有写了一个摄像头的事件

videoSource.NewFrame += new NewFrameEventHandler(VideoSource_NewFrame);//添加事件,不断从摄像头获取每一帧写到视频文件中

videoSource是VideoCaptureDevice这个类的对象,然后NewFrame这个事件估计是每一帧调用一次,然后将每一帧的图像写到视频文件中,代码这样子的:

/// <summary>
/// 摄像头每一帧事件,不断将每一帧的图像传输到视频文件中
/// </summary>
/// <param name="sender"></param>
/// <param name="eventArgs"></param>
private void VideoSource_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
Bitmap bitmap = eventArgs.Frame;//从摄像头中获取每一帧的图像

if (isRecord)
{

writer.WriteVideoFrame(bitmap);
}
}

里面写了一个bool的变量来控制开始录像和结束录像

写道这了,视频可以录制了,但是还有一个问题,那就是我之前以为open里面传的帧数设置是录制的视频的帧数质量,那我像帧数高一点,播放的效果好一点啊,然后我就设置成30帧,然后就发现录制出来的10秒视频3秒钟就播放完了,就像在快进一样,去百度了,才发现是帧数设置过高的原因。这里的帧数是每秒播放几帧,并不是用来控制录像的每秒录几帧,帧数调高会使播放速度变快,反之变慢,9是临界值

然后就可以录制啦,收工

转载于:https://www.cnblogs.com/newwer/p/7109473.html


http://www.niftyadmin.cn/n/1111167.html

相关文章

Coremail 邮件系统入选广东Linux产品推荐目录(转)

Coremail 邮件系统入选广东Linux产品推荐目录(转)[more]广东省在全国范围内开展的基于linux的电子政务产品测评活动&#xff0c;经过技术权威机构的评测和省信息产业厅组织有有关专家的认真评审&#xff0c;近日结果得以揭晓&#xff0c;Coremail2.6大规模电子邮件系统获选linu…

CSS流、浮动和定位

流&#xff1a;浏览器在页面上摆放HTML元素的所用的方法 标准流&#xff1a;默认的流&#xff0c;在网页布局中按元素的写入顺序显示&#xff0c;其中块元素从自上而下而内联元素自左而右摆放(文本是内联元素的一种特殊情况&#xff0c;浏览器会把他分解为适当大小的内联元素以…

MySQL主从故障汇总

MySQL主从故障汇总故障现象一&#xff1a;Slave_IO_Running 为 NO故障现象二&#xff1a;Slave_IO_Running 为 NO故障现象三&#xff1a;Error initializing relay log position: I/O error reading the header from the binary log故障现象一&#xff1a;Slave_IO_Running 为 …

用bind方法保持this上下文

近期自学JavaScript。学到bind方法这块儿有些地方不太明确。自己就查了些资料&#xff0c;结合自己的理解写了这篇文章以备后面回想用。。。事实上应该还是搬砖为主吧。什么是this对象 先来说说什么是this对象吧。每一个函数在调用的时候都会自己主动获取两个特殊变量&#xff…

香港城市大学开办Linux ERP课程(转)

香港城市大学开办Linux ERP课程(转)[more]来源: 珠玑软件&#xff08;中国&#xff09;有限公司 Abas 与 IBM 致力支持香港城市大学专上学院开办 Linux ERP 课程为学生提升竞争力 香港, 3月28日/新华美通/ -- 香港城市大学专上学院商学部于3月16日宣布&#xff0c;自2006年1月1…

Novell提升Linux合作开发标准(转)

Novell提升Linux合作开发标准(转)[more]来源&#xff1a;搜狐IT Novell的openSUSE&#xff0e;org计划自去年8月正式发布以来&#xff0c;一直受到业界的广泛关注和欢迎。日前&#xff0c;Novell宣布&#xff0c;到目前为止openSUSE&#xff0e;org社区的浏览量已超过1300万人次…

MySQL查询时区分大小写的方法

1、一种方法是可以设置表或行的collation&#xff0c;使其为binary或case sensitive。在MySQL中&#xff0c;对于Column Collate其约定的命名方法如下&#xff1a; *_bin: 表示的是binary case sensitive collation&#xff0c;也就是说是区分大小写的 *_cs: case sensitive …

使用Spring MVC后实现一个BaseController

使用Spring MVC技术后&#xff0c;可以实现一个基类的Controller类来分装一些MVC常用的方法&#xff0c;其他的Controller都继承自这个BaseController&#xff0c;这样在使用常用的方法时将会变得非常轻松。 下面给出这个BaseController和涉及到的工具类的源码。 BaseControlle…