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版本。 

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

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

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

 

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

 

时间: 2024-11-13 06:57:33

C#实现录音录像录屏源码的相关文章

Android实现中国象棋附源码下载_Android

象棋,很多人多接触过,学者写了一个,大神可以指点一下~直接上代码: 贴出主要代码,想要Demo的点击下载:中国象棋Demo package wyf.ytl; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; impor

Android实现屏幕锁定源码详解_Android

最近有朋友问屏幕锁定的问题,自己也在学习,网上找了下也没太详细的例子,看的资料书上也没有有关屏幕锁定程序的介绍,下个小决心,自己照着官方文档学习下,现在做好了,废话不多说,先发下截图,看下效果,需要注意的地方会加注释,有问题的朋友可以直接留言,我们共同学习交流,共同提高进步!直接看效果图: 一:未设置密码时进入系统设置的效果图如下:   二:设置密码方式预览: 三:密码解密效果图 四:九宫格解密时的效果图 下面来简单的看下源码吧,此处讲下,这个小DEMO也是临时学习下的,有讲的不明白的地方请朋友

android 4.3 操作源码实现系统截屏(暂无移植性)

感谢网友cjd6568358的帮助,新版的Android系统截屏功能已经实现,需要的朋友请移步项目主页:https://github.com/Android-ScreenShot/AndroidScreenShotService(别忘点个star哦) (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景        android系统的系统截屏功能是google封装起来的,也是大家都很想获得的,经过一个多月的漫长研究,博主终于成功的在android新

android 4.3操作源码实现系统截屏

1.背景 android系统的系统截屏功能是google封装起来的,也是大家都很想获得的,经过一个多月的漫长研究,博主终于成功的在android新版本也就是4.3以上版本实现了系统截屏.如果大家想更好的了解这些知识,我建议您先把android截屏源码捕获以及android截屏尝试方法总结看完再来接着看.下面这种方法是接着上面两篇博客的内容.首先先奉献一张我的截图. 2.需要满足的条件 1.root的手机 2.android4.1以上源码 3.基本的刷机知识,或是用刷机软件 查看本栏目更多精彩内容

android 4.3中一次完整的android源码截屏事件的捕获

1.背景 我们知道android提供了一个系统截屏功能,就是按住电源键和音量减的按键0.5秒,系统将执行截屏功能.所以要实现系统截屏的功能,就是要捕获系统的这两个组合键下面的函数,然后一层一层的向下挖掘.现在网上找到的版本是在Surface.java文件下存在ScreenShot()函数,是@hide的.但是这是之前版本的办法,在android4.3之后已经是不适用的,因为在/frameworks/base/core/java/android/view/的Surface.java下并没有Scre

asp.net-net,vs学生管理系统sql2005,有可用源码与数据库说明,只需连接打开,帮我录个演示视频

问题描述 net,vs学生管理系统sql2005,有可用源码与数据库说明,只需连接打开,帮我录个演示视频 因毕设急需演示视频,本人sqlserver无法连接上,急需吧友根据我的可用源码打开程序连接数据库即可,录制一个一分到一分半的演示截屏视频,有意者留下qq我和你联系,把源码发给你,急求!很急! 解决方案 如果需要视频,请先采纳. 解决方案二: 把你的项目上传到百度网盘,贴出地址,我先看下能不能帮到你. 解决方案三: 解决方案四: 一分到一分半,就算不懂技术也可以自己录制 下面是录制视频软件ht

【android4.3】记一次完整的android源码截屏事件的捕获(不同于网上的老版本)

感谢网友cjd6568358的帮助,新版的Android系统截屏功能已经实现,需要的朋友请移步项目主页:https://github.com/Android-ScreenShot/AndroidScreenShotService(别忘点个star哦) --------------------------------------------------------------------------------------------------------------------- (转载请注明

黑客帝国屏保源码

黑客帝国屏幕保护设置 1. 打开VS2010或以上版本,新建->项目,Visual C++,win32,选择win32控制台应用程序,名称填写为"hacker". 2. 将一下代码复制到项目源文件中 黑客帝国屏保源码 //数字流星雨 作者:Wicrecend #include "stdafx.h" #include <windows.h> #define ID_TIMER 1 #define STRMAXLEN 25 //一个显示列的最大长度 #d

Android编程实现WebView全屏播放的方法(附源码)_Android

本文实例讲述了Android编程实现WebView全屏播放的方法.分享给大家供大家参考,具体如下: 最近因为项目要用webview加载html5的视频,开始不能全屏播,做了很久才做出来!那按我的理解说下怎么实现全屏吧. 首先写布局文件activity_main.xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.