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 捕获基本照片、视频和音频

相机”页面是main中心,用于获取在应用中使用 MediaCapture 的操作指南。 除了基本相机任务外,此页面还链接到高级方案操作指南文章,包括:

  • 在具有硬件相机的设备上使用硬件相机按钮
  • 处理设备和屏幕方向
  • 使用相机配置文件确定设备功能
  • 设置捕获的视频的格式、分辨率和帧速率
  • 使用 AdvancedPhotoCapture 捕获 HDR 或弱光照片
  • 使用 VideoDeviceController 访问手动相机控件,如曝光、白平衡、自动对焦和闪光灯
  • 捕获视频时使用效果
  • 捕获照片序列
  • 使用 MediaFrameReader 从一个或多个相机(包括 rgb、红外和深度相机)获取帧流
  • 从预览流获取帧

相机文章还链接到相机的所有 UWP SDK 示例,例如相机初学者工具包示例。

必须先调用初始化 MediaCapture 对象的 InitializeAsync 方法,然后才能从设备开始预览或捕获。 在 C# 或 C++ 应用中,首次使用 MediaCapture 对象调用 InitializeAsync 应在 STA 线程上。 来自 MTA 线程的调用可能会导致未定义的行为。 InitializeAsync 将启动同意提示,以获取用户对应用访问麦克风或相机的权限。 应从应用的main UI 线程调用 InitializeAsync。 应用必须通过正确清理媒体捕获资源来处理应用挂起或终止。 有关正确关闭 MediaCapture 对象的信息,请参阅 使用 MediaCapture 捕获基本照片、视频和音频

在 Windows 上,音乐和媒体捕获应用应监视 SystemMediaTransportControls.SoundLevel ,以确定应用上的音频流是否已 静音。 对于使用 MediaCapture 对象的应用,当应用的捕获流处于静音状态时,捕获将自动停止。 当音频流取消静音时,捕获不会自动重新启动,因此 可以使用 SoundLevel 更改通知来重启捕获。 使用 SystemMediaTransportControls.PropertyChanged 事件确定 SoundLevel 属性何时更改。

对于Windows Phone 8.x 应用,音乐和媒体应用应清理 MediaCapture 对象和挂起事件处理程序中的关联资源,并在“恢复”事件处理程序中重新创建它们。

在仅音频Windows 8.1应用中,如果 MediaCategory 设置为“其他”,则使用高延迟模式。 若要降低延迟,请将 “MediaCategory ”设置设置为 “通信”。

将就地编辑媒体基础转换效果添加到捕获预览中不会对流产生任何影响。

如果用户未同时启用网络摄像头和麦克风隐私设置,Windows 8已声明网络摄像头和麦克风功能的 UWP 应用将无法在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()

执行与释放或重置非托管资源关联的应用程序定义的任务。

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

当捕获设备的热状态更改时发生。

适用于

另请参阅