MediaFrameReader.TryAcquireLatestFrame 方法

定义

尝试从 MediaFrameSource 获取表示最新帧的 MediaFrameReference 对象。

public:
 virtual MediaFrameReference ^ TryAcquireLatestFrame() = TryAcquireLatestFrame;
MediaFrameReference TryAcquireLatestFrame();
public MediaFrameReference TryAcquireLatestFrame();
function tryAcquireLatestFrame()
Public Function TryAcquireLatestFrame () As MediaFrameReference

返回

一个 MediaFrameReference,表示来自媒体帧源的最新帧。

注解

此方法并不总是成功。 如果方法失败,则返回的 MediaFrameReference 将为 null,因此在尝试使用之前,应始终测试返回的对象是否为 null。 应从 MediaFrameReader.FrameArrived 事件的处理程序中调用此方法,而不是手动轮询新帧。

每个 MediaFrameReader 维护从 TryAcquireLatestFrame 获取的 MediaFrameReference 对象的循环缓冲区。 使用缓冲区中的所有 MediaFrameReference 对象后,对 TryAcquireLatestFrame 的后续调用将导致系统在最早的缓冲区对象上调用 Close (或 Dispose (在 C#) 中)以重复使用它。 释放对象后,就不能再使用它来访问帧数据。 因此,存储 MediaFrameReference 对象的时间不应超过处理帧所需的时间。 如果应用方案要求你保留对数据的引用更长的时间,则应使用提供的 API 之一来获取基础数据。 其中包括:

当这些 API 不再使用时,应用负责对这些 API 返回的对象调用 Close (或 Dispose) 。

重要

如果访问 MediaFrameReferenceVideoMediaFrame 属性提供的 SoftwareBitmapDirect3DSurface 对象,系统会创建对这些对象的强引用,这意味着在对包含的 MediaFrameReference 调用 Dispose 时,它们不会被释放。 这也适用于从 MediaFrameReference.VideoMediaFrame 属性获取的 VideoFrame 对象提供的 SoftwareBitmapDirect3DSurface 对象。 必须直接为要立即释放的对象显式调用 SoftwareBitmapDirect3DSurfaceDispose 方法。 否则,垃圾回收器将最终为这些对象释放内存,但无法知道这将何时出现,并且如果分配的位图或曲面的数量超过系统所允许的最大量,将停止新帧的流程。

适用于