MediaCapture 類別

定義

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

public ref class MediaCapture sealed : IClosable
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
class MediaCapture final : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
class MediaCapture final : IClosable
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
public sealed class MediaCapture : System.IDisposable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Standard)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.MTA)]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
public sealed class MediaCapture : System.IDisposable
function MediaCapture()
Public NotInheritable Class MediaCapture
Implements IDisposable
繼承
Object Platform::Object IInspectable MediaCapture
屬性
實作

Windows 需求

裝置系列
Windows 10 (已於 10.0.10240.0 引進)
API contract
Windows.Foundation.UniversalApiContract (已於 v1.0 引進)
應用程式功能
backgroundMediaRecording microphone webcam

範例

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

// Create and initialze the MediaCapture object.
public async void InitMediaCapture()
{
    _mediaCapture = null;
    _mediaCapture = new Windows.Media.Capture.MediaCapture();

    // Set the MediaCapture to a variable in App.xaml.cs to handle suspension.
    (App.Current as App).MediaCapture = _mediaCapture;

    await _mediaCapture.InitializeAsync(_captureInitSettings);

    CreateProfile();
}

如需如何處理暫停的資訊,請參閱 處理應用程式暫停

<StackPanel Orientation="Horizontal">
    <CaptureElement x:Name="capturePreview" Width="320" Height="240" />
    <Image x:Name="imagePreview" 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));

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

備註

MediaCapture 類別可用來從相機擷取音訊、視訊和影像。 如需顯示相機預覽的操作指南,請參閱 顯示相機預覽。 若要快速開始擷取相片、音訊或視訊,請參閱 使用 MediaCapture 進行基本相片、視訊和音訊擷取

[相機] 頁面是您應用程式中使用 MediaCapture 操作指南的主要中樞。 除了基本相機工作之外,此頁面還會連結至進階案例的操作說明文章,包括:

  • 在具有硬體相機的裝置上使用硬體相機按鈕
  • 處理裝置和螢幕方向
  • 使用相機配置檔來判斷裝置功能
  • 設定所擷取視訊的格式、解析度和幀速率
  • 使用 AdvancedPhotoCapture 擷取 HDR 或低光相片
  • 使用 VideoDeviceController 來存取手動相機控件,例如曝光、白平衡、自動焦點和閃爍
  • 在擷取視訊時使用效果
  • 擷取相片序列
  • 使用 MediaFrameReader 從一或多個相機取得畫面串流,包括 rgb、infrared 和深度相機
  • 從預覽數據流取得框架

相機文章也會連結到相機的所有UWP SDK範例,例如相機入門套件範例。

初始化 MediaCapture 物件的 InitializeAsync 方法必須先呼叫,才能開始從裝置預覽或擷取。 在 C# 或 C++ 應用程式中,第一次使用 MediaCapture 物件來呼叫 InitializeAsync 應該位於 STA 線程上。 來自 MTA 線程的呼叫可能會導致未定義的行為。 InitializeAsync 會啟動同意提示,以取得應用程式存取麥克風或相機的許可權。 您應該從應用程式的主要UI線程呼叫InitializeAsync。 應用程式必須藉由正確清除媒體擷取資源來處理應用程式暫停或終止。 如需正確關閉 MediaCapture 物件的資訊,請參閱 使用 MediaCapture 進行基本相片、視訊和音訊擷取

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

對於 Windows Phone 8.x 應用程式,音樂和媒體應用程式應該清除 Suspending 事件處理程式中的 MediaCapture 對象和相關聯的資源,並在繼續事件處理程式中重新建立它們。

在僅 Windows 8.1 音訊應用程式中,如果 MediaCategory 設定為 [其他],則會使用高延遲模式。 針對低延遲,請將 MediaCategory 設定設為 [通訊]。

將就地編輯媒體基礎轉換效果新增至擷取預覽不會影響數據流。

如果使用者未同時啟用網路攝影機和麥克風隱私權設定,Windows 8 宣告網路攝影機和麥克風功能的 UWP app 將無法在 Windows 8.1 運作。

MediaCapture 僅支援一個傳遞 CBR 編碼。

JPEG 注意事項: JPEG 類型僅供傳遞。 若要擷取影像,影像編碼配置檔可以設定為 [自動],或您需要指定符合原生類型的編碼配置檔。 若要新增效果,您必須切換至未壓縮的視訊原生媒體類型,例如 NV12 或 RGB32。

H.264 注意事項: 如果原生類型是 H.264,您可以使用與原生類型相同的類型來錄製視訊媒體類型。 您無法將效果新增至 H.264 原生類型數據流。 若要擷取視訊,影像編碼配置檔可以設定為 [自動],或您需要指定符合原生類型的編碼配置檔。

注意

這個類別不是敏捷式的,這表示您需要考慮其線程模型和封送處理行為。 如需詳細資訊,請參閱在多線程環境中線程和封送處理 (C++/CX) 和使用 Windows 執行階段 物件 (.NET)

版本歷程記錄

Windows 版本 SDK 版本 已新增值
1607 14393 CreateFrameReaderAsync (MediaFrameSource)
1607 14393 CreateFrameReaderAsync (MediaFrameSource,String)
1607 14393 CreateFrameReaderAsync (MediaFrameSource,String,BitmapSize)
1607 14393 FrameSources
1607 14393 PauseRecordWithResultAsync
1607 14393 RemoveEffectAsync
1607 14393 StopRecordWithResultAsync
1703 15063 CaptureDeviceExclusiveControlStatusChanged
1703 15063 CreateMultiSourceFrameReaderAsync
2004 19041 CreateRelativePanelWatcher

建構函式

MediaCapture()

建立 MediaCapture 物件的新實例。

屬性

AudioDeviceController

取得物件,控制麥克風的設定。

CameraStreamState

取得相機數據流的目前數據流狀態。

FrameSources

取得 MediaFrameSource 物件的唯讀字典,可同時用來取得媒體畫面。

MediaCaptureSettings

取得 MediaCapture 物件的組態設定。

ThermalStatus

取得值,這個值表示擷取裝置目前的熱狀態。

VideoDeviceController

取得物件,控制視訊相機的設定。

方法

AddAudioEffectAsync(IAudioEffectDefinition)

將音訊效果新增至擷取管線。

AddEffectAsync(MediaStreamType, String, IPropertySet)

新增音訊或視訊效果。

AddVideoEffectAsync(IVideoEffectDefinition, MediaStreamType)

將視訊效果新增至擷取管線。

CapturePhotoToStorageFileAsync(ImageEncodingProperties, IStorageFile)

將相片擷取至記憶體檔案。

CapturePhotoToStreamAsync(ImageEncodingProperties, IRandomAccessStream)

將相片擷取至隨機存取數據流。

ClearEffectsAsync(MediaStreamType)

從數據流中移除所有音訊和視訊效果。

Close()

關閉媒體擷取物件。

CreateFrameReaderAsync(MediaFrameSource)

建立用來從 MediaFrameSource 取得畫面的 MediaFrameReader

CreateFrameReaderAsync(MediaFrameSource, String)

建立 MediaFrameReader ,用來從 MediaFrameSource 取得具有指定媒體編碼子類型的畫面。

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

建立 MediaFrameReader ,用來從 MediaFrameSource 取得具有指定媒體編碼子類型和大小的畫面。

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

建立 MultiSourceMediaFrameReader ,用來從一或多個 MediaFrameSource 物件取得時間相互關聯的畫面。

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

建立 MediaCaptureRelativePanelWatcher 類別的新實例,此類別會監視與所提供 DisplayRegion 相關聯的面板,讓應用程式在面板的相對位置變更時收到通知。

Dispose()

執行與釋放 (Free)、釋放 (Release) 或重設 Unmanaged 資源相關聯之應用程式定義的工作。

FindAllVideoProfiles(String)

擷取指定之視訊擷取裝置所支援的所有視訊配置檔清單。

FindConcurrentProfiles(String)

擷取指定之視訊擷取裝置所支持的視訊配置檔清單,該裝置可在其他擷取裝置上使用另一個配置檔時使用。

FindKnownVideoProfiles(String, KnownVideoProfile)

擷取指定視訊擷取裝置所支援的所有視訊配置檔清單,該裝置符合指定的 KnownVideoProfile 值。

GetEncoderProperty(MediaStreamType, Guid)

取得編碼屬性的值。

GetPreviewFrameAsync()

從擷取裝置取得預覽畫面。

GetPreviewFrameAsync(VideoFrame)

從擷取裝置取得預覽畫面,複製到提供的目的地 VideoFrame ,並轉換成目的地框架的格式。

GetPreviewMirroring()

查詢視訊數據流是否水平鏡像。

GetPreviewRotation()

取得影片預覽數據流的旋轉。

GetRecordRotation()

取得錄製影片的旋轉。

InitializeAsync()

使用預設設定,初始化 MediaCapture 物件。

InitializeAsync(MediaCaptureInitializationSettings)

初始化 MediaCapture 物件。

IsVideoProfileSupported(String)

取得布爾值,指出指定的視訊擷取裝置是否支持視訊配置檔。

PauseRecordAsync(MediaCapturePauseBehavior)

暫停進行中的記錄作業。

PauseRecordWithResultAsync(MediaCapturePauseBehavior)

暫停進行中的媒體錄製作業,並提供 MediaCapturePauseResult ,可協助使用者在繼續錄製時,將相機與最後一個擷取的畫面對齊。

PrepareAdvancedPhotoCaptureAsync(ImageEncodingProperties)

初始化進階相片擷取,並提供用來管理錄製的 AdvancedPhotoCapture 物件。

PrepareLowLagPhotoCaptureAsync(ImageEncodingProperties)

初始化低快門延遲相片擷取,並提供用來管理錄製的 LowLagPhotoCapture 物件。

PrepareLowLagPhotoSequenceCaptureAsync(ImageEncodingProperties)

初始化低快門延遲相片序列擷取,並提供用來管理錄製的 LowLagPhotoSequenceCapture 物件。

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

使用指定的自定義接收來儲存錄製,初始化低延遲錄製。 這個方法提供用來管理擷取的 LowLagMediaRecording 物件。

PrepareLowLagRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

使用指定的自定義接收來儲存錄製,初始化低延遲錄製。 這個方法提供用來管理錄製的 LowLagMediaRecording 物件。

PrepareLowLagRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

使用指定的檔案來儲存錄製,初始化低延遲錄製。 這個方法提供用來管理錄製的 LowLagMediaRecording 物件。

PrepareLowLagRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

使用指定的隨機存取數據流來儲存錄製,初始化低延遲錄製。 這個方法提供用來管理錄製的 LowLagMediaRecording 物件。

PrepareVariablePhotoSequenceCaptureAsync(ImageEncodingProperties)

初始化可變相片序列擷取,並提供用來管理錄製的 VariablePhotoSequenceCapture 物件。

RemoveEffectAsync(IMediaExtension)

從擷取管線中移除指定的效果。

ResumeRecordAsync()

繼續暫停的錄製作業。

SetEncoderProperty(MediaStreamType, Guid, Object)

設定編碼屬性。

SetEncodingPropertiesAsync(MediaStreamType, IMediaEncodingProperties, MediaPropertySet)

以異步方式設定媒體編碼屬性。

SetPreviewMirroring(Boolean)

啟用或停用視訊預覽數據流的水準鏡像。 這不是鏡像的慣用方法。 如需詳細資訊,請參閱下方的一節。

SetPreviewRotation(VideoRotation)

旋轉影片預覽串流。

SetRecordRotation(VideoRotation)

旋轉錄製的視訊。

StartPreviewAsync()

開始預覽。

StartPreviewToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

使用指定的編碼配置檔,開始將預覽數據流傳送至自定義媒體接收。

StartPreviewToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

使用指定的編碼配置檔和接收設定,開始將預覽數據流傳送至自定義媒體接收。

StartRecordToCustomSinkAsync(MediaEncodingProfile, IMediaExtension)

使用指定的編碼配置檔開始錄製到自定義媒體接收。

StartRecordToCustomSinkAsync(MediaEncodingProfile, String, IPropertySet)

使用指定的編碼配置檔和接收設定,開始錄製到自定義媒體接收。

StartRecordToStorageFileAsync(MediaEncodingProfile, IStorageFile)

開始以異步方式錄製至記憶體檔案。

StartRecordToStreamAsync(MediaEncodingProfile, IRandomAccessStream)

開始錄製到隨機存取數據流。

StopPreviewAsync()

停止預覽。

StopRecordAsync()

停止錄製。

StopRecordWithResultAsync()

以異步方式停止媒體錄製,並提供 MediaCaptureStopResult ,以協助使用者在重新啟動錄製時,將相機對齊最後一個擷取的畫面。

事件

CameraStreamStateChanged

發生於相機串流的狀態變更時。

CaptureDeviceExclusiveControlStatusChanged

發生於擷取裝置的獨佔控制狀態變更時。

Failed

在媒體擷取期間發生錯誤時引發。

FocusChanged

發生於擷取裝置變更焦點時。

PhotoConfirmationCaptured

擷取相片確認畫面時發生。

RecordLimitationExceeded

發生於超過記錄限制時。

ThermalStatusChanged

發生於擷取裝置的熱狀態變更時。

適用於

另請參閱