在多媒體系統中,一般都會涉及到錄音、錄像、錄屏問題,采集得到的數據可以用來傳輸、播放、或存儲。所以,對於像課件錄制系統、語音視頻錄制系統、錄屏系統等,多媒體數據的采集就是最基礎的功能之一。
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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!