MediaCapture クラス

定義

Web カメラなどのキャプチャ デバイスから写真、オーディオ、ビデオをキャプチャするための機能を提供します。

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、赤外線、深度カメラを含む 1 つ以上のカメラからフレームのストリームを取得する
  • プレビュー ストリームからフレームを取得する

カメラに関する記事は、カメラ スターター キットのサンプルなど、カメラ用のすべての UWP SDK サンプルにもリンクしています。

MediaCapture オブジェクトを初期化する InitializeAsync メソッドは、デバイスからのプレビューまたはキャプチャを開始する前に呼び出す必要があります。 C# または C++ アプリでは、InitializeAsync を呼び出すために MediaCapture オブジェクトを最初に使用する必要があります。 MTA スレッドからの呼び出しにより、未定義の動作が発生する可能性があります。 InitializeAsync は、アプリがマイクまたはカメラにアクセスするためのユーザーのアクセス許可を取得するための同意プロンプトを起動します。 InitializeAsync は、アプリのメイン UI スレッドから呼び出す必要があります。 アプリは、メディア キャプチャ リソースを適切にクリーンアップすることによって、アプリの中断または終了を処理する必要があります。 MediaCapture オブジェクトを正しくシャットダウンする方法については、「 MediaCapture を使用した 基本的な写真、ビデオ、オーディオ キャプチャ」を参照してください。

Windows では、音楽およびメディア キャプチャ アプリは SystemMediaTransportControls.SoundLevel を監視して、アプリ上のオーディオ ストリームが ミュートされているかどうかを判断する必要があります。 MediaCapture オブジェクトを使用するアプリの場合、アプリのキャプチャ ストリームがミュートされると、キャプチャは自動的に停止されます。 オーディオ ストリームがミュート解除されている場合、キャプチャは自動的に再開されないため、 SoundLevel 変更通知を使用してキャプチャを再開できます。 SystemMediaTransportControls.PropertyChanged イベントを使用して、SoundLevel プロパティがいつ変更されたのかを判断します。

Windows Phone 8.x アプリの場合、音楽アプリとメディア アプリは、Suspending イベント ハンドラーで MediaCapture オブジェクトと関連リソースをクリーンし、再開イベント ハンドラーで再作成する必要があります。

オーディオのみのアプリWindows 8.1、MediaCategory 設定が [その他] の場合は、待機時間の長いモードが使用されます。 待機時間を短くするには、 MediaCategory 設定を [通信] に設定します。

インプレース編集 Media Foundation Transform 効果をキャプチャ プレビューに追加しても、ストリームには影響しません。

Web カメラとマイクの両方の機能を宣言した UWP アプリWindows 8、ユーザーが Web カメラとマイクの両方のプライバシー設定を有効にしていない場合、Windows 8.1では機能しません。

MediaCapture では、1 つのパス 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)

指定したメディア エンコード サブタイプを持つフレームを MediaFrameSource から取得するために使用される MediaFrameReader を作成します。

CreateFrameReaderAsync(MediaFrameSource, String, BitmapSize)

指定した メディア エンコード サブタイプとサイズを持つフレームを MediaFrameSource から取得するために使用される MediaFrameReader を作成します。

CreateMultiSourceFrameReaderAsync(IIterable<MediaFrameSource>)

1 つ以上の MediaFrameSource オブジェクトから時間相関フレームを取得するために使用される MultiSourceMediaFrameReader を作成します。

CreateRelativePanelWatcher(StreamingCaptureMode, DisplayRegion)

MediaCaptureRelativePanelWatcher クラスの新しいインスタンスを作成します。これにより、指定された DisplayRegion に関連付けられているパネルが監視され、パネルの相対位置が変更されたときにアプリが通知を受け取ります。

Dispose()

アンマネージ リソースの解放またはリセットに関連付けられているアプリケーション定義のタスクを実行します。

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 を提供します。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 を提供します。MediaCaptureStopResult を使用すると、記録を再起動するときに、ユーザーがカメラを最後にキャプチャしたフレームに合わせて調整できます。

イベント

CameraStreamStateChanged

カメラ ストリームの状態が変化したときに発生します。

CaptureDeviceExclusiveControlStatusChanged

キャプチャ デバイスの排他制御状態が変更されたときに発生します。

Failed

メディア キャプチャ中にエラーが発生したときに発生します。

FocusChanged

キャプチャ デバイスがフォーカスを変更したときに発生します。

PhotoConfirmationCaptured

写真の確認フレームがキャプチャされたときに発生します。

RecordLimitationExceeded

レコードの制限を超えたときに発生します。

ThermalStatusChanged

キャプチャ デバイスの温度状態が変化したときに発生します。

適用対象

こちらもご覧ください