MediaCapture 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
提供從擷取裝置擷取相片、音訊和視訊的功能,例如網路攝影機。
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
- 繼承
- 屬性
- 實作
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 |
取得物件,控制視訊相機的設定。 |
方法
事件
CameraStreamStateChanged |
發生於相機串流的狀態變更時。 |
CaptureDeviceExclusiveControlStatusChanged |
發生於擷取裝置的獨佔控制狀態變更時。 |
Failed |
在媒體擷取期間發生錯誤時引發。 |
FocusChanged |
發生於擷取裝置變更焦點時。 |
PhotoConfirmationCaptured |
擷取相片確認畫面時發生。 |
RecordLimitationExceeded |
發生於超過記錄限制時。 |
ThermalStatusChanged |
發生於擷取裝置的熱狀態變更時。 |