다음을 통해 공유


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 이벤트에 대한 처리기 내에서 이 메서드를 호출해야 합니다.

MediaFrameReaderTryAcquireLatestFrame에서 가져온 MediaFrameReference 개체의 순환 버퍼를 유지 관리합니다. 버퍼의 모든 MediaFrameReference 개체를 사용한 후 TryAcquireLatestFrame에 대한 후속 호출로 인해 시스템에서 가장 오래된 버퍼 개체에서 Close (또는 C#의 Dispose )를 호출하여 다시 사용합니다. 개체가 삭제되면 더 이상 프레임 데이터에 액세스하는 데 사용할 수 없습니다. 따라서 실제로 프레임을 처리하는 데 필요한 것보다 더 오래 MediaFrameReference 개체를 저장해서는 안 됩니다. 앱 시나리오에서 데이터에 대한 참조를 더 오래 유지해야 하는 경우 제공된 API 중 하나를 사용하여 기본 데이터를 가져와야 합니다. 여기에는 다음이 포함됩니다.

더 이상 사용되지 않을 때 이러한 API에서 반환된 개체에 대해 Close (또는 Dispose)를 호출하는 것은 앱의 책임입니다.

중요

MediaFrameReferenceVideoMediaFrame 속성에서 제공하는 SoftwareBitmap 또는 Direct3DSurface 개체에 액세스하는 경우 시스템은 이러한 개체에 대한 강력한 참조를 만듭니다. 즉, 포함된 MediaFrameReference에서 Dispose를 호출할 때 삭제되지 않습니다. 이는 MediaFrameReference.VideoMediaFrame 속성에서 가져온 VideoFrame 개체에서 제공하는 SoftwareBitmap 또는 Direct3DSurface 개체에도 적용됩니다. 개체를 즉시 삭제하려면 SoftwareBitmap 또는 Direct3DSurfaceDispose 메서드를 직접 명시적으로 호출해야 합니다. 그러지 않으면 가비지 수집기에서 결국 이러한 개체의 메모리를 해제하지만 언제 수행될지 알 수 없으며, 할당된 비트맵 또는 화면 수가 시스템에서 허용된 최대 크기를 초과할 경우 새 프레임의 흐름이 중단됩니다.

적용 대상