MultiSourceMediaFrameReference 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
一个包装类,提供对从一个或多个 MediaFrameSource 对象获取的时间相关帧的访问。 调用 TryGetFrameReferenceBySourceId 以获取表示特定媒体帧源中的帧的 MediaFrameReference 。
public ref class MultiSourceMediaFrameReference sealed : IClosable
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 262144)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class MultiSourceMediaFrameReference final : IClosable
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 262144)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class MultiSourceMediaFrameReference : System.IDisposable
Public NotInheritable Class MultiSourceMediaFrameReference
Implements IDisposable
- 继承
- 属性
- 实现
Windows 要求
设备系列 |
Windows 10 Creators Update (在 10.0.15063.0 中引入)
|
API contract |
Windows.Foundation.UniversalApiContract (在 v4.0 中引入)
|
注解
若要从媒体帧源获取 MultiSourceMediaFrameReference 的实例,请通过在 MediaCapture 对象上调用 CreateMultiSourceFrameReaderAsync 并传入要从中读取的 MediaFrameSource 对象来创建 MultiSourceReader。 通过调用 StartAsync 启动后,调用 TryAcquireLatestFrame 以获取 MultiSourceMediaFrameReference ,其中包含媒体帧源中最新的相关帧。
通过调用 MultiSourceMediaFrameReference.TryGetFrameReferenceBySourceId 并传入所需媒体帧源的 MediaFrameSourceInfo.Id 属性的值,从特定媒体帧源获取时间相关的媒体帧。
每个 MultiSourceMediaFrameReader 维护从 MultiSourceMediaFrameReference.TryGetFrameReferenceBySourceId 获取的 MediaFrameReference 对象的循环缓冲区。 使用缓冲区中的所有 MediaFrameReference 对象后,对 TryAcquireLatestFrame 的后续调用将导致系统在最早的缓冲区对象上调用 Close (或 Dispose (在 C#) 中)以重复使用它。 释放对象后,就不能再使用它来访问帧数据。 因此,存储 MediaFrameReference 对象的时间不应超过处理帧所需的时间。 如果应用方案要求你保留对数据的引用更长的时间,则应使用提供的 API 之一来获取基础数据。 这些方法包括:
- BufferMediaFrame.Buffer
- VideoMediaFrame.SoftwareBitmap
- VideoMediaFrame.GetVideoFrame
- VideoMediaFrame.CameraIntrinsics 应用负责在不再使用这些 API 返回的对象上调用 Close (或 Dispose) 。
重要
如果访问 MediaFrameReference 的 VideoMediaFrame 属性提供的 SoftwareBitmap 或 Direct3DSurface 对象,系统会创建对这些对象的强引用,这意味着在对包含的 MediaFrameReference 调用 Dispose 时,它们不会被释放。 必须直接为要立即释放的对象显式调用 SoftwareBitmap 或 Direct3DSurface 的 Dispose 方法。 否则,垃圾回收器将最终为这些对象释放内存,但无法知道这将何时出现,并且如果分配的位图或曲面的数量超过系统所允许的最大量,将停止新帧的流程。
有关使用 MediaFrameSource 捕获帧的操作指南,请参阅 使用 MediaFrameReader 处理媒体帧。
方法
Close() |
释放 对象和关联的资源。 |
Dispose() |
执行与释放或重置非托管资源关联的应用程序定义的任务。 |
TryGetFrameReferenceBySourceId(String) |
尝试获取指定媒体帧源的时间相关 MediaFrameReference 。 |