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 (或 Dispose ,以便重复使用它。 释放对象后,不能再使用它来访问帧数据。 因此,不应将 MediaFrameReference 对象存储的时间长于实际需要处理帧的时间。 如果你的应用方案要求你保留对数据的引用更长的时间,则应使用提供的一个 API 来获取基础数据。 其中包括:

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

重要

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

适用于