C#实现录制屏幕

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

一.实现原理

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

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

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

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

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

二.实现代码

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

    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("生成视频文件成功!");
        }
    }

三.Demo下载

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

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

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

2015.6.18 整理全部相关demo如下:

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

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

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

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

时间: 2024-10-11 16:13:58

C#实现录制屏幕的相关文章

C++编程 使用QT5 SDK录制屏幕并显示

在项目中,我们有要录制屏幕的需求,录制屏幕有多种方法,可以基于windows api的BitBlt .ffmpeg的AVDevice.directx 和QT,本文讲解基于QT5的抓屏.QT相对于其他几种抓屏方式优势是跨平台做的比较好,接口简单,劣势相对于directx抓屏消耗大一些,但directx只能是windows.经过测试directx抓屏速度最快,其他接口速度基本一致. 在我的电脑上qt 1080P屏幕抓屏消耗60~80毫秒,720p消耗30~50,也就是说如果抓屏1080我一秒最多录制

屏幕监视专家 v1.0 定时录制屏幕动画发送到指定邮箱

ScreenWatcher v1.0功能:定时录制屏幕动画发送到指定邮箱,录制的动画为gif,可指定录制多长时间.指定几点直接开始录制,完全后台运行.作者:Bluefish 下载链接: http://pan.baidu.com/s/1kVpm4ib 密码: f3qu 使用说明: ①运行目录内的“设置.bat”,或者命令行下执行 ScreenWatcher.exe -set 可进入设置,如果直接运行则开始后台工作.   建议设置好参数,测试录像成功收到邮件以后再复制到目标电脑上运行. ②发信邮箱只

Android 录制屏幕的实现方法

Android 录制屏幕的实现方法 Chrome   2017-02-15 15:32:01 发布 您的评价:       5.0   收藏     0收藏 长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件. 如今,我们已经接近这个目标.Chrome团队正在添加一种功能,可以通过getUserMedia从Android设备上共享屏幕.我创建了一个原型来录制屏幕并将录制内容流式传输到其他设备,以便将其录制到文件并为其

【Mac】使用QuickTime Player录制屏幕录像

我门分享都需要用到录屏软件,Mac系统有自带的QuickTime Player软件可以录制屏幕录像 环境与工具 1.mac系统 2.mac自带的QuickTime Player软件 使用方法 1.打开QuickTime Player,然后在菜单中选择新建屏幕录制 2.出现小窗口,选择是否录制声音,是否录制鼠标 3.点击中间红色按钮开始录制 4.可以录制全屏,也可以录制部分 5.开始录制 6.结束录制 7.得到录像,并保存

电脑怎么在线录制屏幕声音,如何内录

手机和电脑已经是生活和工作中都离不开的工具,而录音也是平时使用较多的功能之一,我们都知道录音除了和硬件设施有关外,和我们的录音软件也要很大关系,手机电脑本身都有自带的录音软件,但是往往功能都比较单一,无法实现我们的高要求,那有没有相关软件可以代替呢?电脑怎么在线录制屏幕声音,如何内录? 1.首先需要在电脑上先安装一个专业的录音软件--迅捷录音软件,看看到登录/注册按钮,可以通过三种方式进行登录哦!2.在软件主界面,可以修改格式选项及声音来源,这些都是可以自行选择的,MP3属于正常的录音模式,WA

vivo怎么录屏 手机录制屏幕详细教程

在手机上我们经常可以刷到许多类似于手机游戏之类的屏幕视频我想肯定会有很多人好奇怎么录制的,今天小编所说的便是教大家如何在安卓手机上进行屏幕录像,下面便是关于vivo怎么录屏的具体操作方法,希望能对你们有所帮助. 使用工具:安卓手机 操作方法: 第一步.首先我们录制屏幕视频首先需要在手机的应用商店下载上面一款安卓录屏工具. 第二步.之后我们在手机上运行它,进入它的录屏界面,然后我们便开始录制设置它的参数,比如说清晰度,有标清.高清.超清三种画质可以选择设置,录制方向也有竖屏和横屏两种可以选择. 第

安卓手机上怎么录制屏幕视频

我们已经进入互联网时代,每个人都寸步不离手机.电脑等电子产品,看到美丽好看的视频总想记录下来,毕竟看到喜欢的视频还真不太容易,所以问题来了,安卓手机上怎么录制屏幕视频呢? 使用工具: 手机 操作方法: 1.随着手机的更新换代,很多手机上都是有屏幕录制这个功能,可以录制手机上的任何画面,但是有时候录制下来的视频可能会有一些模糊,所以想要录制好视频,还得需要专业的录制视频工具. 2.比如说我们要录制手机游戏视频,那么首先在手机上打开想要录制的王者荣耀游戏并进入一场游戏对局. 3.然后设置录制游戏时需

oppor9手机怎么录制屏幕视频

我们已经进入互联网时代,每个人都寸步不离手机.电脑等电子产品,看到美丽好看的视频总想记录下来,毕竟看到喜欢的视频还真不太容易,所以问题来了,oppor9手机怎么录制屏幕视频呢?安卓手机上怎么录制屏幕视频呢? 使用工具: 手机 操作方法: 1.随着手机的更新换代,很多手机上都是有屏幕录制这个功能,可以录制手机上的任何画面,但是有时候录制下来的视频可能会有一些模糊,所以想要录制好视频,还得需要专业的录制视频工具. 2.比如说我们要录制手机游戏视频,那么首先在手机上打开想要录制的王者荣耀游戏并进入一场

美图t8手机怎么录制屏幕

手机录制视频对于现在来说,是一个比较实用的操作方式,而且正好符合当代的潮流发展,比如说录制游戏画面,精彩时刻总是值得被记录:录制电影片段,看到喜欢精彩的片段总是有想要录制分享的冲动:录制视频聊天通话,温馨友爱的时刻不容错过.总之手机上的一切画面都是可以录制下来的,那么美图t8手机怎么录制屏幕?下面便来分享安卓手机录制视频的方法.使用工具:手机操作方法:1.今天所要讲的是针对于安卓用户,所以只适用于安卓手机使用,比如说oppo.vivo.华为.小米.三星.魅族等等都是可以使用的.2.比如说我们录制

macos系统实现用ffmpeg录制屏幕和录制声音命令

录制命令 MAC OS 录制屏幕 ffmpeg -f avfoundation -i 1 -r 30 out.yuv -f: 使用 avfoundation 采集数据 -i: 指定从哪采集数据,它的文件索引号0 -r: 指定的帧数 out.yuv 是最终采集下来的视频. yuv格式原始数据 MAC OS 录制声音 ffmpeg -f avfoundation -i :0 out.wav :0 指的是声音的设备 ? 原文地址:https://www.cnblogs.com/fandx/p/1212