在多媒体系统中,一般都会涉及到录音、录像、录屏问题,采集得到的数据可以用来传输、播放、或存储。所以,对于像课件录制系统、语音视频录制系统、录屏系统等,多媒体数据的采集就是最基础的功能之一。

  MCapture可用于采集本地摄像头拍摄到的图像、麦克风输入的声音、以及当前电脑桌面的图像。

一.MCapture 简介
  MCapture 组件录音、录像、录屏内部的核心技术包括以下3点:

(1)摄像头采集:可指定摄像头的索引、摄像头视频的分辨率、采集的帧频。

(2)麦克风采集:可指定麦克风的索引。默认采样参数为 -- 采样位数:16bit,采样频率:16000,声道数:1。

(3)桌面屏幕采集:可指定采集的帧频、是全屏采集还是采集屏幕的某个矩形区域、是否显示鼠标光标。

二.C#录音组件、录像组件、录屏组件——MCapture 
  对于使用者而言,MFile组件中的主要类的结构图如下所示:

(1)ICameraCapturer是摄像头视频采集组件;IMicrophoneCapturer是麦克风声音采集组件;IDesktopCapturer 是屏幕桌面采集组件。它们都集成自ICapture基础接口。

(2)我们可以通过调用CapturerFactory的CreateXXXX方法来创建对应的采集器实例。

(3)得到采集器实例后,调用Start方法,即可开始采集;调用Stop方法,即停止采集。

(4)采集得到的数据,将通过相应的事件(ImageCaptured、AudioCaptured)暴露出来,我们预定这些事件,即可拿到采集的数据。

三.使用接口详细定义
1.各采集器接口

/// <summary>
/// 傲瑞采集器基础接口。
/// </summary>
public interface ICapturer
{
/// <summary>
/// 如果采集的过程中发生错误,将触发此事件。
/// </summary>
event CbGeneric<Exception> CaptureError;

/// <summary>
/// 开始采集。
/// </summary>
void Start();

/// <summary>
/// 停止采集。
/// </summary>
void Stop();
}

/// <summary>
/// 摄像头采集器。
/// </summary>
public interface ICameraCapturer : ICapturer
{
/// <summary>
/// 当采集到一帧图像时,触发该事件。
/// </summary>
event CbGeneric<Bitmap> ImageCaptured;
}

/// <summary>
/// 桌面采集器。
/// </summary>
public interface IDesktopCapturer : ICapturer
{
/// <summary>
/// 当采集到一帧图像时,触发该事件。
/// </summary>
event CbGeneric<Bitmap> ImageCaptured;

}

/// <summary>
/// 麦克风采集器。
/// </summary>
public interface IMicrophoneCapturer : ICapturer
{
/// <summary>
/// 当采集到一帧声音数据(20ms)时,触发该事件。
/// </summary>
event CbGeneric<byte[]> AudioCaptured;
}

  要特别提醒的是:

(1)ICapture接口的CaptureError事件,当采集的过程中出现错误时,将触发此事件,并且,采集过程会终止。

(2)针对视频和桌面采集,ImageCaptured会暴露出采集得到的视频帧(Bitmap),当该视频帧使用完毕后,要立即调用其Dispose方法,以释放其占用的内存(而不要等到GC自动回收)。

2.采集器工厂

/// <summary>
/// 采集器工厂。
/// </summary>
public static class CapturerFactory
{
/// <summary>
/// 创建摄像头采集器。
/// </summary>
/// <param name="cameraIndex">摄像头的索引</param>
/// <param name="videoSize">摄像头的分辨率</param>
/// <param name="fps">采集的帧频</param>
/// <returns>摄像头采集器</returns>
public static ICameraCapturer CreateCameraCapturer(int cameraIndex, Size videoSize, int fps); /// <summary>
/// 创建桌面采集器。
/// </summary>
/// <param name="fps">采集的帧频。</param>
/// <param name="showMouseCursor">采集的图像中是否显示鼠标的光标</param>
/// <returns>桌面采集器</returns>
public static IDesktopCapturer CreateDesktopCapturer(int fps, bool showMouseCursor); /// <summary>
/// 创建桌面采集器。
/// </summary>
/// <param name="fps">采集的帧频。</param>
/// <param name="showMouseCursor">采集的图像中是否显示鼠标的光标</param>
/// <param name="captureRect">要采集桌面的区域。</param>
/// <returns>桌面采集器</returns>
public static IDesktopCapturer CreateDesktopCapturer(int fps, bool showMouseCursor, Rectangle? captureRect);
/// <summary>
/// 创建麦克风采集器(采样位数:16bit,采样频率:16000,声道数:1)。
/// </summary>
/// <param name="microphoneIndex">麦克风的索引</param>
/// <returns>麦克风采集器</returns>
public static IMicrophoneCapturer CreateMicrophoneCapturer(int microphoneIndex);
}

四.录音、录像、录屏源码
  下面我们使用一个demo来介绍如何使用MCapture 组件,在这个demo中,我们直接将采集到的视频数据显示在主窗体上,如果是语音数据,则在界面显示采集得到的语音数据的长度。Demo 运行的截图如下所示:

  MCapture Demo 源码:MCaptureDemo.rar

  如果是要实现录音、录像、录屏,可以将MCapture与我们的语音视频录制组件MFile相结合,来快速实现这一功能。

2015.6.18 整理全部相关开源源码如下:
(声卡/麦克风/摄像头/屏幕)采集&录制源码源码:WinForm版本   、WPF版本。

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

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

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

---------------------
作者:zhuweisky
来源:CSDN
原文:https://blog.csdn.net/zhuweisky/article/details/41116581
版权声明:本文为博主原创文章,转载请附上博文链接!

C#开源录音组件、录像组件、录屏组件及demo源码的更多相关文章

  1. 日志组件Log2Net的介绍和使用(附源码开源地址)

    Log2Net是一个用于收集日志到数据库或文件的组件,支持.NET和.NetCore平台. 此组件自动收集系统的运行日志(服务器运行情况.在线人数等).异常日志.程序员还可以添加自定义日志. 该组件支 ...

  2. 使用Camstudio和KeyCastOW来录屏制作软件Demo视频

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:使用Camstudio和KeyCastOW来录屏制作软件Demo视频.

  3. Java开源生鲜电商平台-系统架构与技术选型(源码可下载)

    Java开源生鲜电商平台-系统架构与技术选型(源码可下载) 1.  硬件环境 公司服务器 2.   软件环境 2.1  操作系统 Linux CentOS 6.8系列 2.2 反向代理/web服务器 ...

  4. 重磅来袭,开源Asp.Net MVC网上商城BrnShop正式发布,提供源码下载(转)

    BrnShop网上商城是以Asp.Net mvc3为基础开发的网上商城,源代码完全开源(企业版的源代码目前还没有完全整理完成,一旦整理完成也全部开源). 啥话也不说了,直接上源码:下载源码(由于公司服 ...

  5. android物理动画、Kotlin客户端、架构组件、菜单效果、应用选择器等源码

    Android精选源码 Android一个有趣的Android动画交互设计 android可伸缩日历效果源码 关于界面,全新的卡片风格,支持夜晚模式 Android 用 Kotlin 实现的基于物理的 ...

  6. Android 音视频深入 四 录视频MP4(附源码下载)

    本篇项目地址,名字是<录音视频(有的播放器不能放,而且没有时长显示)>,求star https://github.com/979451341/Audio-and-video-learnin ...

  7. android后台截屏实现(2)--screencap源码修改

    首先找到screencap类在Android源码中的位置,/442/frameworks/base/cmds/screencap/screencap.cpp 源码如下: /* * Copyright ...

  8. 基于highcharts封装的组件-demo&源码

    前段时间做的项目中需要用到highcharts绘制各种图表,其实绘制图表本身代码很简单,但是由于需求很多,有大量的图形需要绘制,所以就不得不复制粘贴大量重复(默认配置等等)的代码,所以,后来抽空自己基 ...

  9. Java开源生鲜电商平台-监控模块的设计与架构(源码可下载)

    Java开源生鲜电商平台-监控模块的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-监控模块的设计与架构,我们谈到监控,一般设计到两个方面的内容: 1. 服务器本身的监控.(比如:linux ...

随机推荐

  1. php xdebug的配置、调试、跟踪、调优、分析

    xdebug 的 profiler 是一个强大的工具,它能分析 PHP 代码,探测瓶颈,或者通常意义上来说查看哪部分代码运行缓慢以及可以使用速度提升.Xdebug 2 分析器输出一种兼容 cacheg ...

  2. 用Python爬E站本

    用Python爬E站本 一.前言 参考并改进自 OverJerry 大佬的 教你怎么用Python爬取E站的本子_OverJerry. 本文为技术学习记录,不提供访问无存在网站的任何方法,也不包含不和 ...

  3. ThinkPHP各个目录是什么含义ThinkPHP怎么安装和使用

    最近kdchxue看完了smarty之后,想学习下框架,于是乎就选择了ThinkPHP,听说这个框架简单易用,另外还是国产的!所以kdchxue毫不犹豫的就选择了ThinkPHP 了!下面看看Thin ...

  4. 很全的vue插件汇总,赶紧收藏下(转)

    Vue是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件特别整理了常用的vue插件,来了个大汇总,方便查找使用,便于工作 ...

  5. django 开发Broken pipe from ('127.0.0.1', 58078)问题解决

    最近写的一个项目,前端使用了表单submit提交,后端接收POST数据存储.实际上的逻辑并不复杂, django接收到的时候会产生Broken pipe from ('127.0.0.1', 5807 ...

  6. 简要分析一下java中线程的生命周期

    面试题:您了解线程吗?简单叙述一下线程的生命周期? 答:之前学过一些有关于线程方面的知识,并且在编写代码的过程中还是要经常考虑线程,所以,我对线程还是了解一点的. 首先,创建一个线程,线程进入初始状态 ...

  7. UE4 Keynote 1

    [UE4 Keynote 1] 1.U3D中的Project,在UE4中叫 ContentBrowser,中文名叫“内容浏览器” 最多可以打开4个ContentBrowser,通过 “窗口” -> ...

  8. docker学习11-上传本地镜像到镜像仓库

    前言 在本地自己制作用过镜像后,上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境. 如果公开的话,别人也可以用你的镜像快速搭建环境,类似于 GitHub 本地代码上传到代码仓库,再从仓库拉取代 ...

  9. JDK1.8 LocalDate 使用方式;LocalDate 封装Util,LocalDate工具类(三)

    未完待续 ........ 前言: 大企鹅的日常分享,第三步,最近一直在想策略设计模式和工厂模式结合优化ifelse的写法,看了很多资料,终于写出了自己要写的东西,在这段时间里,也有求助小伙伴,但是, ...

  10. 重新学习Spring注解——扩展原理

    39.扩展原理-BeanFactoryPostProcessor 40.扩展原理-BeanDefinitionRegistryPostProcessor 41.扩展原理-ApplicationList ...