Skip to main content
MediaCapture Class

提供從網路攝影機等擷取裝置擷取相片、音訊和視訊的功能。

語法


var mediaCapture = new Windows.Media.Capture.MediaCapture();

public sealed class MediaCapture : IDisposable

Public NotInheritable Class MediaCapture
    Implements IDisposable

public ref class MediaCapture sealed : IClosable

屬性

[ DualApiPartition()]
[ MarshalingBehavior(Standard)]
[ Threading(MTA)]
[ Version(0x06020000)]

成員

MediaCapture類別 具有下列類型的成員:

建構函式

MediaCapture類別 具有這些建構函式。

建構函式描述
MediaCapture Creates a new instance of the MediaCapture object.

 

事件

MediaCapture類別 具有這些事件。

事件描述
Failed Raised when an error occurs during media capture.
RecordLimitationExceeded Occurs when the record limit is exceeded.

 

方法

The MediaCapture 類別 擁有這些方法。 使用 C#、Visual Basic 和 C++,它也會繼承方法自Object 類別.

方法描述
AddEffectAsync Adds an audio or video effect.
CapturePhotoToStorageFileAsync Captures a photo to a storage file.
CapturePhotoToStreamAsync Captures a photo to a random-access stream.
ClearEffectsAsync Removes all audio and video effects from a stream.
Close [C++, JavaScript]Closes the media capture object.
Dispose [C#, VB]Performs tasks associated with freeing, releasing, or resetting unmanaged resources.
GetEncoderProperty Gets the value of an encoding property.
GetPreviewMirroring Queries whether the video stream is mirrored horizontally.
GetPreviewRotation Gets the rotation of the video preview stream.
GetRecordRotation Gets the rotation of the recorded video.
InitializeAsync() Initializes the MediaCapture object, using default settings.
InitializeAsync(MediaCaptureInitializationSettings) Initializes the MediaCapture object.
PrepareLowLagPhotoCaptureAsync Initializes the low shutter lag photo capture and provides the LowLagPhotoCapture object used to manage the recording.
PrepareLowLagPhotoSequenceCaptureAsync Initializes the low shutter lag photo sequence capture and provides the LowLagPhotoSequenceCapture object used to manage the recording.
PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension) Initializes the low lag recording using the specified custom sink to store the recording. This method provides the LowLagMediaRecording object used to managed the capture.
PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet) Initializes the low lag recording using the specified custom sink to store the recording. This method provides the LowLagMediaRecording object used to managed the recording.
PrepareLowLagRecordToStorageFileAsync Initializes the low lag recording using the specified file to store the recording. This method provides the LowLagMediaRecording object used to managed the recording.
PrepareLowLagRecordToStreamAsync Initializes the low lag recording using the specified random-access stream to store the recording. This method provides the LowLagMediaRecording object used to managed the recording.
SetEncoderProperty Sets an encoding property.
SetEncodingPropertiesAsync Asynchronously sets the media encoding properties.
SetPreviewMirroring Enables or disables horizontal mirroring of the video preview stream.
SetPreviewRotation Rotates the video preview stream.
SetRecordRotation Rotates the recorded video.
StartPreviewAsync Starts preview.
StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension) Starts sending a preview stream to a custom media sink using the specified encoding profile.
StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet) Starts sending a preview stream to a custom media sink using the specified encoding profile and sink settings.
StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension) Start recording to a custom media sink using the specified encoding profile.
StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet) Start recording to a custom media sink using the specified encoding profile and sink settings.
StartRecordToStorageFileAsync Starts recording asynchronously to a storage file.
StartRecordToStreamAsync Starts recording to a random-access stream.
StopPreviewAsync Stops preview.
StopRecordAsync Stops recording.

 

屬性

MediaCapture類別 擁有這些屬性。

屬性存取類型描述

AudioDeviceController

唯讀Gets an object that controls settings for the microphone.

MediaCaptureSettings

唯讀Gets the configuration settings for the MediaCapture object.

VideoDeviceController

唯讀Gets an object that controls settings for the video camera.

 

備註

MediaCapture 類別是用來從相機擷取音訊、視訊和影像。您必須先呼叫會初始化擷取裝置的 InitializeAsync 方法,才能開始從裝置進行擷取。

使用 PrepareLowLagPhotoSequenceCaptureAsync 設定採用相片快速序列的相片序列模式。如需使用相片序列的範例,請參閱 媒體擷取範例

您可使用 VideoDeviceController 屬性,以便與擷取裝置互動。 例如,您可以使用 TorchControl FlashControl 屬性設定裝置上的 LED 和閃爍。 VideoDeviceController 的其他屬性是 SceneModeControl RegionsOfInterestControl FocusControl IsoSpeedControl。每個控制項都會提供 Supported 屬性,用於判斷裝置硬體是否支援控制項。

在 C# 或 C++ 應用程式中,第一次使用 MediaCapture 物件呼叫 InitializeAsync 應該是在 STA 執行緒上。從 MTA 執行緒呼叫可能會產生未定義的行為。

InitializeAsync 會啟動同意提示,以取得使用者的權限讓應用程式可以存取麥克風或照相機。應該從您的應用程式的主要 UI 執行緒呼叫 InitializeAsync。如需詳細資訊,請參閱 啟用敏感性裝置的方針

如果應用程式在預覽中,而進入不可見狀態時,應該停止預覽。 如果應用程式重新進入可見狀態,則必須重新建立 MediaCapture

音樂和媒體擷取應用程式應該監視 SystemMediaTransportControls.SoundLevel,以判斷應用程式上的音訊資料流是否為 Muted。對於使用 MediaCapture 物件的應用程式,當應用程式的擷取資料流設為靜音時,擷取就會自動停止。當音訊資料流取消靜音時,擷取不會自動重新啟動,因此變更通知的 SoundLevel 可以用來重新啟動擷取。 使用 SystemMediaTransportControls.PropertyChanged 事件判斷 SoundLevel 屬性何時變更。

在 Windows 8.1 純音訊應用程式,如果 MediaCategory 設定為 Other,則會使用高延遲模式。 若要使用低延遲,請將 MediaCategory 設定為 Communications

MediaCapture 只支援單次 CBR 編碼。

Notes on JPEG:JPEG 型別只是穿通。若要擷取影像,影像編碼設定檔可以設定為 [自動],否則您需要指定符合原生型別的編碼設定檔。若要加入效果,您需要切換至未壓縮的視訊原生媒體類型,例如 NV12 或 RGB32。

Notes on H.264:如果原生型別是 H.264,您可以使用與原生型別相同的視訊媒體類型進行錄製。您無法將效果加入至 H.264 原生型別資料流。若要擷取視訊,影像編碼設定檔可以設定為 [自動],否則您需要指定符合原生型別的編碼設定檔。

注意事項  :這個類別並不敏捷,也就是說,您需要考慮其執行緒模型和封送處理行為。如需詳細資訊,請參閱 執行緒和封送處理 (C++/CX) 在多執行緒環境 (.NET) 中使用 Windows 執行階段物件

範例

下列程式碼範例會示範如何建立及初始化 MediaCapture 物件。


// Create and initialze the MediaCapture object.
function initMediaCapture() {
    oMediaCapture = null;
    oMediaCapture = new Windows.Media.Capture.MediaCapture();
    oMediaCapture.initializeAsync(captureInitSettings).then (function (result) {
       createProfile();
    }, errorHandler);    
}

這個範例示範如何使用 CaptureElement 預覽網路攝影機,和如何拍照並在 Image 物件中顯示。此 XAML 會使用 CaptureElementImage 以及一些 Button 物件建立簡單的 UI,以便和 MediaCapture 項目互動。 在程式碼中,有一個方法可以初始化 MediaCapture 物件、一個方法可以開始預覽附加至 MediaCapture 物件的相機、一個方法可以停止預覽、還有一個方法可以拍攝並顯示相片。


<StackPanel Orientation="Horizontal">
    <CaptureElement x:Name="capturePreview" Width="320" Height="240" />
    <Image x:Name="imagePreivew" Stretch="None" Width="320" Height="240" />
</StackPanel>

<StackPanel Orientation="Horizontal">
    <Button Click="InitCamera_Click" Content="Initialize Camera" />
    <Button Click="StartCapturePreview_Click" Content="Start Capture Preview" />
    <Button Click="CapturePhoto_Click" Content="Capture Photo"/>
    <Button Click="StopCapturePreview_Click" Content="Stop Capture Preview" />
</StackPanel>

Windows.Media.Capture.MediaCapture captureManager;

async private void InitCamera_Click(object sender, RoutedEventArgs e)
{
    captureManager = new MediaCapture();
    await captureManager.InitializeAsync();
}

async private void StartCapturePreview_Click(object sender, RoutedEventArgs e)
{
    capturePreview.Source = captureManager;
    await captureManager.StartPreviewAsync();
}

async private void StopCapturePreview_Click(object sender, RoutedEventArgs e)
{
    await captureManager.StopPreviewAsync();
}

async private void CapturePhoto_Click(object sender, RoutedEventArgs e)
{
    ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();

    // create storage file in local app storage
    StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
        "TestPhoto.jpg",
        CreationCollisionOption.GenerateUniqueName);

    // take photo
    await captureManager.CapturePhotoToStorageFileAsync(imgFormat, file);

    // Get photo as a BitmapImage
    BitmapImage bmpImage = new BitmapImage(new Uri(file.Path));

    // imagePreivew is a <Image> object defined in XAML
    imagePreivew.Source = bmpImage;
}

如需使用範例媒體擷取的範例,請參閱 媒體擷取範例

如果您想嘗試使用媒體擷取和其他重要的 Windows 8 功能,請下載 Windows 8 實機操作演練。這些實驗室提供模組化的逐步簡介,以便使用您選擇的程式設計語言 (JavaScript 和 HTML 或 C# 和 XAML) 來建立 Windows 市集應用程式範例。

需求

支援的最小用戶端

Windows 8 [Windows 市集應用程式, 桌面應用程式]

支援的最小伺服器

Windows Server 2012 [Windows 市集應用程式, 桌面應用程式]

命名空間

Windows.Media.Capture
Windows::Media::Capture [C++]

Metadata

Windows.winmd

Capabilities

webcam
microphone

請參閱

啟用敏感性裝置的方針
藍圖
將多媒體加入至使用 C++、C# 或 Visual Basic 建置的 Windows 市集應用程式
將多媒體加入至使用 JavaScript 的 Windows 市集應用程式
範例
媒體擷取範例
相機擷取 UI 範例
相機選項 UI 範例
裝置列舉範例
即時通訊範例
媒體延伸範例
Windows 8 實機操作演練
其他資源
支援的音訊和視訊格式

 

 

Microsoft 正展開一份線上問卷調查,了解您對於網站的看法。如果您選擇參加,您離開網站時即會顯示線上問卷調查。

您是否想要參加?