MultiSourceMediaFrameReader.TryAcquireLatestFrame 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
尝试获取 MultiSourceMediaFrameReference 对象,该对象提供对一个或多个 MediaFrameSource 对象中与时间相关的最新帧的访问权限。
public:
virtual MultiSourceMediaFrameReference ^ TryAcquireLatestFrame() = TryAcquireLatestFrame;
MultiSourceMediaFrameReference TryAcquireLatestFrame();
public MultiSourceMediaFrameReference TryAcquireLatestFrame();
function tryAcquireLatestFrame()
Public Function TryAcquireLatestFrame () As MultiSourceMediaFrameReference
返回
一个 MultiSourceMediaFrameReference,用于从媒体帧源访问最新帧。
注解
获取 MultiSourceMediaFrameReference 实例后,通过调用 MultiSourceMediaFrameReference.TryGetFrameReferenceBySourceId 并传入所需媒体帧源 的 MediaFrameSourceInfo.Id 属性的值,从特定媒体帧源获取时间相关的媒体帧。
每个 MultiSourceMediaFrameReader 维护从 TryAcquireLatestFrame 获取的 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 方法。 否则,垃圾回收器将最终为这些对象释放内存,但无法知道这将何时出现,并且如果分配的位图或曲面的数量超过系统所允许的最大量,将停止新帧的流程。