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

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

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

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

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

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



版權聲明:本文爲博主原創文章,未經博主允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章