C#開源錄音組件、錄像組件、錄屏組件及demo源碼

在多媒體系統中,通常都會涉及到錄音、錄像、錄屏問題,採集獲得的數據能夠用來傳輸、播放、或存儲。因此,對於像課件錄製系統、語音視頻錄製系統、錄屏系統等,多媒體數據的採集就是最基礎的功能之一。服務器

  MCapture可用於採集本地攝像頭拍攝到的圖像、麥克風輸入的聲音、以及當前電腦桌面的圖像。ide

一.MCapture 簡介
  MCapture 組件錄音、錄像、錄屏內部的核心技術包括如下3點:.net

(1)攝像頭採集:可指定攝像頭的索引、攝像頭視頻的分辨率、採集的幀頻。orm

(2)麥克風採集:可指定麥克風的索引。默認採樣參數爲 -- 採樣位數:16bit,採樣頻率:16000,聲道數:1。視頻

(3)桌面屏幕採集:可指定採集的幀頻、是全屏採集仍是採集屏幕的某個矩形區域、是否顯示鼠標光標。blog

 

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

          聲卡錄製源碼、 混音&錄製源碼、  同時錄製(桌面+麥克風+聲卡)源碼、 麥克風攝像頭錄製(可預覽) 

          錄製畫中畫(桌面+攝像頭+麥克風/聲卡)。 

          遠程錄製或在服務器端錄製語音視頻屏幕

相關文章
相關標籤/搜索