MediaFrameReader.TryAcquireLatestFrame 方法

定义

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

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

返回

MediaFrameReference

表示媒体帧源中最新帧的 MediaFrameReference

注解

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

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

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

重要

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

适用于