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 捕获基本照片、视频和音频。
“相机”页面是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 |
获取一个对象,该对象控制摄像机的设置。 |
方法
事件
CameraStreamStateChanged |
当相机流的状态更改时发生。 |
CaptureDeviceExclusiveControlStatusChanged |
当捕获设备的独占控制状态更改时发生。 |
Failed |
在媒体捕获期间发生错误时引发。 |
FocusChanged |
当捕获设备更改焦点时发生。 |
PhotoConfirmationCaptured |
捕获照片确认帧时发生。 |
RecordLimitationExceeded |
超出记录限制时发生。 |
ThermalStatusChanged |
当捕获设备的热状态更改时发生。 |