使用aforg.net 录制摄像头 附源码

这一篇在上一篇 使用aforg.net
捕获摄像头
 的基础上稍加修改 增加录制功能


录制功能使用AForge.Video.FFMPEG 需要添加对 AForge.Video.FFMPEG.dll的引用
并且拷贝AForge.NET\Framework\Externals\ffmpeg\bin路径下的全部dll到Debug目录下

直接上代码了 对上一篇的代码稍有修改

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

using
AForge.Video;

using
AForge.Video.DirectShow;

using
AForge.Video.FFMPEG;

using
System;

using
System.Drawing;

using
System.Windows.Forms;

namespace
CameraCapture

{

    public
partial class Form1 : Form

    {

        private
FilterInfoCollection filterInfoCollection;

        private
VideoCaptureDevice captureDevice;

        //AForge.Video.FFMPEG 提供的视频写入类

        private
VideoFileWriter videoFileWriter = new
VideoFileWriter();

        private
VideoCapabilities[] videoCapabilities;

        private
string fileName;

        private
Size frameSize;

        private
int framRate;

        public
Form1()

        {

            InitializeComponent();

            filterInfoCollection = new
FilterInfoCollection(FilterCategory.VideoInputDevice);

            foreach
(FilterInfo item in
filterInfoCollection)

            {

                this.comboBox1.Items.Add(item.Name);

            }

            this.comboBox1.SelectedIndex = 0;

            //先初始化一下 否则在下面判断是否已运行时会报错

            captureDevice = new
VideoCaptureDevice();

        }

        private
void button1_Click(object
sender, EventArgs e)

        {

            if
(this.checkBox1.Checked)

            {

                SaveFileDialog sfd = new
SaveFileDialog();

                sfd.AddExtension = true;

                sfd.DefaultExt = ".avi";

                sfd.Filter = "视频文件|*.avi";

                if
(sfd.ShowDialog() == DialogResult.OK)

                {

                    fileName = sfd.FileName;

                }

                //文件名 宽度 高度 帧率 编码

                videoFileWriter.Open(fileName, frameSize.Width, frameSize.Height, framRate, VideoCodec.MPEG4);

            }

            if
(captureDevice.IsRunning)

                captureDevice.Stop();

            captureDevice.NewFrame += captureDevice_NewFrame;

            captureDevice.Start();

            MessageBox.Show(videoFileWriter.FrameRate.ToString());

        }

        private
void captureDevice_NewFrame(object
sender, NewFrameEventArgs eventArgs)

        {

            this.pictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();

            if
(this.checkBox1.Checked)

            {

                videoFileWriter.WriteVideoFrame((Bitmap)eventArgs.Frame);

            }

        }

        private
void comboBox1_SelectedIndexChanged(object
sender, EventArgs e)

        {

            GetVideoCapabilities();

        }

        /// <summary>

        ///获取摄像头分辨率

        /// </summary>

        private
void GetVideoCapabilities()

        {

            captureDevice = new
VideoCaptureDevice(filterInfoCollection[comboBox1.SelectedIndex].MonikerString);

            try

            {

                videoCapabilities = captureDevice.VideoCapabilities;

                foreach
(VideoCapabilities capabilty in
videoCapabilities)

                {

                    if
(!this.comboBox2.Items.Contains(capabilty.FrameSize))

                    {

                        this.comboBox2.Items.Add(capabilty.FrameSize);

                    }

                }

                if
(videoCapabilities.Length == 0)

                {

                    this.comboBox2.Items.Add("Not supported");

                }

                this.comboBox2.SelectedIndex = 0;

            }

            catch
(Exception ex)

            {

                MessageBox.Show(ex.Message);

            }

        }

        private
void comboBox2_SelectedIndexChanged(object
sender, EventArgs e)

        {

            this.frameSize = captureDevice.VideoCapabilities[comboBox2.SelectedIndex].FrameSize;

            this.framRate = captureDevice.VideoCapabilities[comboBox2.SelectedIndex].FrameRate;

        }

        /// <summary>

        /// 关闭后结束捕获 释放资源

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private
void Form1_FormClosing(object
sender, FormClosingEventArgs e)

        {

            if
(captureDevice.IsRunning)

            {

                captureDevice.Stop();

            }

            if
(videoFileWriter.IsOpen)

            {

                videoFileWriter.Close();

            }

        }

    }

}

  

源代码下载地址:http://files.cnblogs.com/DragonX/CameraCapture2.zip

使用aforg.net 录制摄像头 附源码,布布扣,bubuko.com

时间: 2024-10-13 23:31:13

使用aforg.net 录制摄像头 附源码的相关文章

使用aforg.net 捕获摄像头 附源码

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 using System; using System.Drawing; using System.Windows.Forms; using AForge.Video; us

Android 音视频深入 八 小视频录制(附源码下载)

本篇项目地址,求starthttps://github.com/979451341/Audio-and-video-learning-materials/tree/master/%E5%B0%8F%E8%A7%86%E9%A2%91%E5%BD%95%E5%88%B6 这个项目我觉得厉害,因为之前录屏用了很多代码,而这个真正实现录屏功能的代码一百行都不到 还有就是关于整个界面UI也做得不错,但是关于界面如何实现的我就不多说了,直接说如何实现录屏的代码 首先Camera如何给数据SurfaceVi

opencvbase 实现opencv打开摄像头和初步处理等效果操作(附源码)

// TwoCameraOnTimer2Dlg.cpp : 实现文件 /* CvMat, Mat, IplImage之间的互相转换 IpIImage -> CvMat CvMat matheader; CvMat * mat = cvGetMat(img, &matheader); CvMat * mat = cvCreateMat(img->height, img->width, CV_64FC3); cvConvert(img, mat) IplImage -> Mat

一组网页边栏过渡动画,创意无限!【附源码下载】

今天我们想与大家分享另一套过渡效果.这一次,我们将探讨如何实现侧边栏的过渡动画,就像我们已经在多级推出菜单中使用的.我们的想法是,以细微的 过渡动画显示一些隐藏的侧边栏,其余的内容也是.通常侧边栏滑入,把其他内容推到一边.这个可过程中可以加入很多微妙而奇特的效果,而今天这篇文章能够给 你一些启示. 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 立即下载      在线演示 因为我们希望能够在一个页面上展现所有的效果,因此我们示

创意无限!一组网页边栏过渡动画【附源码下载】

今天我们想与大家分享另一套过渡效果.这一次,我们将探讨如何实现侧边栏的过渡动画,就像我们已经在多级推出菜单中使用的.我们的想法是,以细微的过渡动画显示一些隐藏的侧边栏,其余的内容也是.通常侧边栏滑入,把其他内容推到一边.这个可过程中可以加入很多微妙而奇特的效果,而今天这篇文章能够给你一些启示. 温馨提示:为保证最佳的效果,请在 IE10+.Chrome.Firefox 和 Safari 等现代浏览器中浏览. 立即下载      在线演示 因为我们希望能够在一个页面上展现所有的效果,因此我们示例的

C#版无人驾驶汽车(附源码)

一,简单问题复杂化: 100公里/1小时的速度,在日常生活中是比较常见的速度,把它转换为其它单位: 100公里/1小时 ≈ 28米/1秒 100公里/1小时 ≈ 2800厘米/秒 如果想要无人驾驶汽车达到厘米级的位移监测.探测器扫描路况时,每秒上传2800次数据给PC机.若一辆汽车有10个探测器,就意味着每秒的并发量为2.8W次/秒. 2.8W次/秒的并发量,在网站上肯定会采用分布式,缓存,读写分离,集群技术,关键还有这个数据的存储,到底用二维数据库,还是用NOSQL.这些问题是不是让你很头痛?

wpf 模拟3D效果(和手机浏览图片效果相似)(附源码)

原文 wpf 模拟3D效果(和手机浏览图片效果相似)(附源码) pf的3D是一个很有意思的东西,类似于ps的效果,类似于电影动画的效果,因为动画的效果,(对于3D基础的摄像机,光源,之类不介绍,对于依赖属性也不介绍.),个人认为,依赖属性这个东西,有百分之五十是为了3D而存在.(自己写的类似于demo的东西)先上图,无图无真相这是demo的整个效果图,可以用鼠标移动,触摸屏也可以手指滑动,图片会移动,然后移动结束,会有一个回弹的判断. <Window x:Class="_3Dshow.Wi

10个Web前端值得收藏的背景全屏效果展示(附源码)(上)

作为一个前沿的 Web 开发者,对于 HTML5 和 现在流行的3D技术或多或少都有掌握.特别是在移动端大显身手.这篇文章挑选了10个绚丽的背景全景展示效果,希望对你有所帮助. 1.  JS图片背景全屏代码实现物理效果 玩法介绍:可以随意拖动鼠标.按住鼠标左键选中旋转物体.或者按住鼠标滑轮放大或者缩小,有不同的效果,赶紧来体验一下. 源码下载  /  在线演示 2.  CSS3学习 - 网站背景拉伸平铺jQuery插件 这个插件集成了一些非常好的 JavaScript 库,提供一个方便使用的文本

【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩然(孟襄阳),张继.杜审言,文学家皮日休,北宋著名书画家米芾(米襄阳),“允冠百王”的光武帝刘秀,东方圣人释道安等一大批历史文化名人.小说<三国演义>120回故事中有30多回提到襄阳. 相传诸葛亮的老婆黄月英黄头发黑皮肤,但知识广博.诸葛亮发明木牛流马,就是从黄月英的传授的技巧上发展出来.不仅如此