C#实现录音录像录屏源码

简介:   以前写过两篇录音和录像的文章(实现语音视频录制、在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上录屏的原理跟录音、录像是差不多的,如果了解了我前面两篇文章中介绍的内容,只要在它们的基础上做一些修改就可以了。

  以前写过两篇录音和录像的文章(实现语音视频录制在服务器端录制语音视频),最近有朋友问,如果要实现屏幕录制这样的功能,该怎么做了?实际上录屏的原理跟录音、录像是差不多的,如果了解了我前面两篇文章中介绍的内容,只要在它们的基础上做一些修改就可以了。

一.录屏原理

   录制屏幕的实现方案仍然基于OMCS+MFile构建,原理与实现语音视频录制差不多,我这里只列出其中的主要差异:

(1)使用DynamicDesktopConnector连接到屏幕桌面。

(2)使用定时器(比如10fps,则每隔100ms一次)定时调用DynamicDesktopConnector的GetCurrentImage方法,把得到的图像使用MFile写入视频文件。

(3)源码演示的是不需要同时录制麦克风的声音,所以使用了MFile提供的SilenceVideoFileMaker组件(而非原来的VideoFileMaker组件),仅仅录制视频数据。

(4)通过MultimediaManager的DesktopEncodeQuality属性,控制屏幕图像的清晰度。

 

二.录屏源码

  源码如下所示,如果不想下载源码,可以直接通过下面的代码了解详细的实现思路。

    public partial class Form1 : Form
    {
        private MultimediaServer server; //在本地内嵌OMCS服务器
        private IMultimediaManager multimediaManager;
        private SilenceVideoFileMaker maker = new SilenceVideoFileMaker(); //录制无声视频
        private DynamicDesktopConnector dynamicDesktopConnector = new DynamicDesktopConnector(); //远程桌面连接器
       
        public Form1()
        {
            InitializeComponent();
            int port = 9900;
            OMCSConfiguration config = new OMCSConfiguration(10,8, EncodingQuality.High,16000,640,480,"") ;
            this.server = new MultimediaServer(port, new DefaultUserVerifier(), config, false, null);

            this.multimediaManager = MultimediaManagerFactory.GetSingleton();
            this.multimediaManager.DesktopEncodeQuality = 1; //通过此参数控制清晰度 
            this.multimediaManager.Initialize("aa01", "", "127.0.0.1", port);

            this.dynamicDesktopConnector.ConnectEnded += new ESBasic.CbGeneric<ConnectResult>(dynamicDesktopConnector_ConnectEnded);
            this.dynamicDesktopConnector.BeginConnect("aa01"); //连接本地桌面          

            this.Cursor = Cursors.WaitCursor;            
        }       

        void dynamicDesktopConnector_ConnectEnded(ConnectResult obj)
        {
            System.Threading.Thread.Sleep(500);
            this.Ready();  
        }       

        private void Ready()
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new CbGeneric(this.Ready));
            }
            else
            {
                this.Cursor = Cursors.Default;
                this.button1.Enabled = true;
                this.label1.Visible = false;
            }
        }

        private System.Threading.Timer timer;
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Oraycn.MFile.GlobalUtil.SetAuthorizedUser("FreeUser", "");
                //初始化H264视频文件
                this.maker.Initialize("test.mp4", VideoCodecType.H264, this.dynamicDesktopConnector.DesktopSize.Width, this.dynamicDesktopConnector.DesktopSize.Height, 10);

                this.timer = new System.Threading.Timer(new System.Threading.TimerCallback(this.Callback), null ,0, 100);
                this.label1.Text = "正在录制......";
                this.label1.Visible = true;
                this.button1.Enabled = false;
                this.button2.Enabled = true;
            }
            catch (Exception ee)
            {
                MessageBox.Show(ee.Message);
            }
        } 

        //定时获取屏幕图像,并使用MFile写入视频文件
        private void Callback(object state)
        {            
            Bitmap bm = this.dynamicDesktopConnector.GetCurrentImage();
            this.maker.AddVideoFrame(bm);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.timer.Dispose();
            this.button1.Enabled = false;
            this.button2.Enabled = false;
            this.label1.Visible = false;

            this.maker.Close(true);
            MessageBox.Show("生成视频文件成功!");
        }
    }

 

三.源码开源下载

       2015.01.06 现在更好的方案是 MCapture + MFile,将声卡/麦克风/摄像头/屏幕的采集与录制集中在一个源码中,截图运行如下:    

             

 

2014.11.26  现在录制本地的语音、视频、屏幕的最好的方案是MCapture + MFile,而不是通过OMCS绕一大圈,相应的源码源码下载Oraycn.Record源码.rar 。 

       当然,如果是远程录制语音、视频、屏幕,最好的方案是OMCS + MFile

2015.6.18 整理全部相关开源源码如下:

(声卡/麦克风/摄像头/屏幕)采集&录制源码源码:WinForm版本   WPF版本。 

          声卡录制源码、 混音&录制源码、  同时录制(桌面+麦克风+声卡)源码、 麦克风摄像头录制(可预览) 

          录制画中画(桌面+摄像头+麦克风/声卡)。 

          远程录制或在服务器端录制语音视频屏幕

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

 

目录
相关文章
|
开发框架 前端开发 JavaScript
C# 6.0+JavaScript云LIS系统源码  云LIS实验室信息管理新型解决方案
云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序,可协助区域内所有临床实验室相互协调并完成日常检验工作,对区域内的检验数据进行集中管理和共享,通过对质量控制的管理,最终实现区域内检验结果互认。其目标是以医疗服务机构为主体,以医疗资源和检验信息共享为目标,集成共性技术及医疗服务关键技术,建立区域协同检验,最大化利用有限的医疗卫生资源。
323 1
|
前端开发 Java C#
java/C#语言开发的医疗信息系统11套源码
java/C#语言开发的医疗信息系统11套源码
334 2
|
8月前
|
存储 SQL 开发框架
c# erp源码(简单进销存)
c# erp源码(简单进销存)
417 1
|
存储 Oracle 关系型数据库
PACS源码,C#语言数字医学影像系统成品源码
**数字医学影像系统(RIS/PACS)**采用C#开发,基于C/S架构,配Oracle数据库,具备自主版权,适用于项目实施。系统包含分诊、超声、放射、内镜、病理等工作站,支持基本信息维护、报表查询和系统维护。功能亮点有:WorkList管理、影像采集传输、存储检索、图像处理、多序列浏览、流程控制、报告录入与审核、支持多种影像设备及高级影像处理。RIS与PACS数据库同步,并集成HIS、电子病历等系统接口。全面遵循DICOM3.0标准。
247 1
PACS源码,C#语言数字医学影像系统成品源码
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
242 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
BI 数据处理
一体化的医学实验室信息系统源码,C#LIS系统源码
面向医学实验室的一体化平台提供标本流程管理、报告发布及科室管理支持。它与HIS无缝对接,简化患者信息录入,实现检验结果实时同步。系统自动处理数据、分类样本、计算参考范围,并对异常结果预警。条码管理简化样本追踪,质控管理提升检测准确性。平台还支持数据审核发布、历史结果查询对比、灵活报表打印及统计分析等功能,辅助科室管理和试剂库存控制,加强科室间沟通协作。
293 0
一体化的医学实验室信息系统源码,C#LIS系统源码
|
存储 运维 BI
基于C#-VC-MSSQL开发的全套PACS系统源码 3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
PACS的功能价值在于通过连接不同的影像设备,存储与管理图像,图像的调用与后处理,实现资源共享,降低成本,达到提高工作效率、提升医疗水平的目地;
289 1
基于C#-VC-MSSQL开发的全套PACS系统源码  3D PACS系统源码:可实现医学影像获取、存档、观片、处理、打印多项应用
|
数据采集 存储 安全
C#手术麻醉系统源码 可对接HIS LIS PACS 医疗系统各类设备
术麻醉信息管理系统主要还是为了手术室开发提供全面帮助的系统,其主要是由监护设备数据采集子系统和麻醉临床系统两个子部分组成。包括从手术申请到手术分配,再到术前访视、术中记录及术后恢复的全过程中都可以得到全方位的保障。
215 4
C#手术麻醉系统源码 可对接HIS  LIS   PACS 医疗系统各类设备
|
数据采集 监控 BI
C#实验室检验LIS信息系统源码 微生物检验、质控维护
LIS系统的主要目标是为检验室开展检验工作提供更加有效的系统支持。该系统将尽量减少以人工操作的方式来实现信息转移,减少在接收检验项目、报告结果和保存记录等工作中可能会出现的人为误差,为检验结果查询提供更有效的方法,节省了管理信息所需的琐碎时间和精力。为实验室技术人员提供智能化的运行模式,使处理诸如按照规程审核检验结果、取消检验项目、分析、处理存在重大疑问的检验结果、执行特殊的命令和处理质量控制等问题更轻松自如,这将使检验人员更快地获得准确清晰的检验结果。为临床医护人员提供在线设施,使他们可以及时准确地获得相关实验室信息。确保检验结果的可靠性和准确性,利用实验室管理信息系统的仪器监控和质量控制,
181 0
|
C# Windows
C#开源的两款功能强大的录屏神器
C#开源的两款功能强大的录屏神器
247 5