首页 > 编程语言 >c# 摄像头及保存视频记录

c# 摄像头及保存视频记录

时间:2024-05-10 15:55:32浏览次数:22  
标签:视频 capture c# var new null videoCompressors 摄像头

 

using System.IO;
        using ICameraDll.DirectX.Capture;
 
        Capture capture;    //摄像头录像操作
        Filters filters = new Filters();    //Filter集合
 
        // 函数
        int GetffshowIndex()
        {
            FilterCollection videoCompressors = this.filters.VideoCompressors;
            for (var i = 0; i < videoCompressors.Count; i++)
            {
                if ((videoCompressors[i] != null) && videoCompressors[i].Name.Equals("ffdshow video encoder"))
                {
                    return i;
                }
            }
            return -1;
        }
        void CreateFilepath(string FilePath)
        {
            var dir = FilePath.Remove(FilePath.LastIndexOf("\\"));
            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            Control videoControl = pictureBox1;
            string filePath = "d:\\Camera\\test\\Video\\";
            string fileName = "test.avi";
 
            // 检测摄像头是否被占用
            if (capture != null)
            {
                capture.Stop();
                capture.DisposeCapture();
            }
 
            //获取ffshow视频解码器索引
            var ffshowIndex = GetffshowIndex();
 
            if (ffshowIndex > 0)
            {
                var Flie = filePath + fileName;
                CreateFilepath(Flie);
                capture = new Capture(new Filters().VideoInputDevices[0], null);
 
                //设置承载控件
                capture.PreviewWindow = videoControl;
 
                //设置视频解码器
                capture.VideoCompressor = filters.VideoCompressors[ffshowIndex];
 
                //设置要保存的文件路径和文件名
                capture.Filename = Flie;
 
                //设置帧
                capture.FrameRate = 15;
 
                //设置视频分辨率
                capture.FrameSize = new Size(320, 240);
 
                //开启录制
                capture.Start();
            }
 
 
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            if (capture != null)
            {
                // 停止录制
                capture.Stop();
                capture.DisposeCapture();
                capture = null;
            }
        }

 另外运行这个代码可能需要给电脑安装视频解码器, 用的是 codecs_pack 这款软件。

参考网址https://blog.csdn.net/lyshark_lyshark/article/details/125852235

标签:视频,capture,c#,var,new,null,videoCompressors,摄像头
From: https://www.cnblogs.com/qingjiawen/p/18184548

相关文章

  • [ARC069F] Flags
    题意有\(n\)个旗子。你需要将她们插在数轴上。第\(i\)个旗子只能放在\(x_i\)或\(y_i\)处。你需要求所有旗子的最小距离\(d\)的最大值。Sol二分个答案先。考虑\(\text{check}\),注意到这是个\(\text{2-sat}\)的经典模型。具体地,设\(S=x\cupy\)若\(|S_i......
  • 一道DP(2024ICPC武汉邀请赛A)-shaking trees
    ShakingTrees题外话这题易哥哥跟我说这题的时候,点明了这题是关于高度\(100\)的\(O(n^3)\)或者\(O(n^4)\)的dp,还有提出切割点的概念使序列化。dp是真的,序列化也是真的。只能说易哥哥我的神。不过其实切割点是根据树形态而变的,之前一直以为是不变的,歪了好久。不知道是我没get到......
  • 探讨:ARC(Automatic Reference Counting)与手动内存管理的区别及工作原理
    在iOS和macOS开发中,内存管理是一个至关重要的话题。在过去,手动内存管理是一项繁琐且容易出错的任务,而引入了ARC(AutomaticReferenceCounting,自动引用计数)之后,内存管理变得更加简单和安全。本文将详细讨论ARC和手动内存管理之间的区别,并解释ARC的工作原理。1.ARC与手......
  • 探讨:Grand Central Dispatch(GCD)与 Operation 和 OperationQueue 的使用
    在iOS开发中,GrandCentralDispatch(GCD)和Operation和OperationQueue是两种常用的多线程编程技术,它们各有优劣,适用于不同的场景。本文将详细讲解它们在不同情况下的具体使用,并提供Swift和Objective-C语言的示例。1.GrandCentralDispatch(GCD)Swift示例://在后台队列......
  • 解析 Grand Central Dispatch(GCD)的详细使用方法
    GrandCentralDispatch(GCD)是苹果提供的一种用于管理多线程编程的技术,它提供了一种简单而强大的方式来实现并发任务的调度和执行。本文将详细介绍GCD的使用方法,并提供一些常用的示例。1.DispatchQueue(调度队列)调度队列是GCD中用于管理任务执行的核心概念,它分为两种类型:串......
  • Dapr IoT Architecture是一个基于.NET平台的物联网系统架构
    DaprinIoT.UnderstandingofconceptbuildingdistributedapplicationinIoThttps://docs.dapr.io 在构建一个网联网系统(InternetofThings,IoT)或数字化系统的C#开源系统架构中,通常需要考虑以下关键方面:1.设备连接和数据采集:使用C#编写设备连接模块,支持多种通信协......
  • Python-有序字典OrderedDict练习题
    问题:读取键盘输入结果,创建n个键值对,将其排序后放入有序字典并输出。详细描述:根据提示,实现函数功能:读取n(n>0)行输入,以每一行的数据为key,行号(从0开始)为value,建立n对键值对,然后将他们按照key排序后,放入一个有序字典,最后输出这个有序字典。importcollectionsdefFunc():pairs......
  • Connecting to github.com (github.com)|20.205.243.166|:443... failed: Connection
    今天使用ubuntu虚拟机编译buidroot代码时出现一些压缩包无法从github下载,如下图: 可是拷贝上图log中的下载链接到windows浏览器进行打开会自动进行下载成功,如粘贴该链接 https://github.com/winshining/nginx-http-flv-module/archive/v1.2.8/nginx-http-flv-......
  • docker的一些命令 以及dockerFile语法
    文件夹重新命名mvnode-v14.18.1-linux-x64node-v14.18.1dokcer命令 将linux的文件复制到docker容器里面       dockercp/usr/local/node-v14.18.1/8ec26052dfad:/usr/local/node-v14.18.1将docker容器里面的文件复制到linux       dockerc......
  • react甘特图
    importReact,{useEffect,useRef,useState}from'react'import'./indexgun.less'exportdefaultfunctionGunttCharts(props:any){const{dataSource,widthgezi=55,rowHeight=40,///数据行高hourWidth=80,///数据行宽......