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

一.录屏原理

  录制屏幕的实现方案仍然基于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 = ;
OMCSConfiguration config = new OMCSConfiguration(,, EncodingQuality.High,,,,"") ;
this.server = new MultimediaServer(port, new DefaultUserVerifier(), config, false, null); this.multimediaManager = MultimediaManagerFactory.GetSingleton();
this.multimediaManager.DesktopEncodeQuality = ; //通过此参数控制清晰度
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();
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, ); this.timer = new System.Threading.Timer(new System.Threading.TimerCallback(this.Callback), null ,, );
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版本

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

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

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

敬请了解:

ESFramework通信框架     OMCS网络语音视频框架     MFile语音视频录制组件    MCapture语音视频采集组件  StriveEngine轻量级通信引擎    OAUS 自动升级系统

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

  1. 怎样录制屏幕并将结果保存为Gif

    怎样录制屏幕 并将结果保存为GIF 大前天写文章,需要把PPT的翻转页面截成动态图.我一开始就想到保存文件肯定是GIF.但是如何生成呢?素材又从哪里来?以前自己感兴趣做过把一组连拍的图片做成动态图,再 ...

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

    ScreenWatcher v1.0功能:定时录制屏幕动画发送到指定邮箱,录制的动画为gif,可指定录制多长时间.指定几点直接开始录制,完全后台运行.作者:Bluefish 下载链接: http:// ...

  3. 【Android Studio安装部署系列】二十六、Android studio录制屏幕并生成gif文件

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 Android Studio自带录制屏幕功能,那么就可以很方便地将手机上的屏幕操作录制成视频.然后借助一些软件或者网站转换成gif文 ...

  4. oppor9手机怎么录制屏幕视频

    我们已经进入互联网时代,每个人都寸步不离手机.电脑等电子产品,看到美丽好看的视频总想记录下来,毕竟看到喜欢的视频还真不太容易,所以问题来了,oppor9手机怎么录制屏幕视频呢?安卓手机上怎么录制屏幕视 ...

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

    在手机上我们经常可以刷到许多类似于手机游戏之类的屏幕视频我想肯定会有很多人好奇怎么录制的,今天小编所说的便是教大家如何在安卓手机上进行屏幕录像,下面便是关于vivo怎么录屏的具体操作方法,希望能对你们 ...

  6. Vivox9怎么录制屏幕

    手机怎么录屏是很多手机党一直提出的问题,而且经常发生录制的视频没有声音的现象,现在就给大家推荐一款软件,不仅能完美的录制视频,而且还可以完整的将视频声音录制下来,下面看看Vivox9怎么录制屏幕吧! ...

  7. iOS ReplayKit实时录制屏幕实现方案的细节记录

    项目有个需求,需要把ios设备上的操作画面实时传输出去,也就是类似推流手机直播画面的方案. 一番调研后发现在ios中,我们可以通过ios自带ReplayKit框架实现. 关于ReplayKit的讲解, ...

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

    我门分享都需要用到录屏软件,Mac系统有自带的QuickTime Player软件可以录制屏幕录像 环境与工具 1.mac系统 2.mac自带的QuickTime Player软件 使用方法 1.打开 ...

  9. Ubuntu下录制屏幕并转换成gif【转】

    本文转载自:https://blog.csdn.net/u012964944/article/details/50464263 *录制屏幕 1)打开Ubuntu软件中心,安装RecordMyDeskt ...

随机推荐

  1. Beta项目冲刺 --第五天

    忙里偷得半日闲-- 队伍:F4 成员:031302301 毕容甲 031302302 蔡逸轩 031302430 肖阳 031302418 黄彦宁 会议内容: 1.站立式会议照片: 2.项目燃尽图 3 ...

  2. 1110MySQL select实现原理

    转自http://www.jianshu.com/p/NsWbRv 工作中需要借鉴MySQL对于select的具体实现,在网上搜了很久,几乎都是介绍原理的,对于实现细节都没有介绍,无奈之下只得自己对着 ...

  3. [转]领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处

    原文地址:http://www.blogjava.net/johnnylzb/archive/2010/05/27/321968.html 上一篇文章作为一个引子,说明了领域驱动设计的优势,从本篇文章 ...

  4. 编写实现连接oracle数据库并返回Connection对象的Java工具类

    只需要实现一个功能,所以只写一个方法,为了方便调用,设为静态方法 package com.jv; import java.sql.Connection; import java.sql.DriverM ...

  5. java设计模式(八) 适配器模式

    [适配器模式]将一个类的接口,转换成客户期望的另外一个接口.适配器让原本接口不兼容的类可以合作无间. 1,Duck接口 package com.pattern.adapter; public inte ...

  6. maven2-snapshot快照库和release发布库的应用

    在项目中应用snapshot和release库,应用snapshot和release库达到不同环境下发布不同的版本的目的,首先看一个pom文件的定义: <project> <mode ...

  7. MySQL数据表格导入导出

    一 初始数据(共6条记录) username userpwd age admin admin 18 root root 18 cat cat 17 dog dog 15 dog1 dog1 15 zh ...

  8. Azure 数据库中文乱码的问题

    1,创建数据库的时候记得选择中文的 2,更新中文的时候记得加上N

  9. Jquery实现滚动到底部加载更多(最原始)

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  10. 计算机组成原理 及CPU,硬盘,内存三者的关系

    前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...