MediaCapture クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
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
- 継承
- 属性
- 実装
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 |
ビデオ カメラの設定を制御する オブジェクトを取得します。 |
メソッド
イベント
CameraStreamStateChanged |
カメラ ストリームの状態が変化したときに発生します。 |
CaptureDeviceExclusiveControlStatusChanged |
キャプチャ デバイスの排他制御状態が変更されたときに発生します。 |
Failed |
メディア キャプチャ中にエラーが発生したときに発生します。 |
FocusChanged |
キャプチャ デバイスがフォーカスを変更したときに発生します。 |
PhotoConfirmationCaptured |
写真の確認フレームがキャプチャされたときに発生します。 |
RecordLimitationExceeded |
レコードの制限を超えたときに発生します。 |
ThermalStatusChanged |
キャプチャ デバイスの温度状態が変化したときに発生します。 |