首先,我需要获取使用AVKit
录制的视频的最后一帧。因此,在给我didFinishRecordingTo
的{{1}}委托方法中,我使用的outputFileURL
参数等于{{1}的AVAssetImageGenerator's
copyCGImage
方法}。
我的视频记录在time
中设置了5秒的限制,这是Apple文档中所述的“ 硬限制”,这意味着(经过测试)视频记录将永远不会准确地击中5s,它将更早停止,即4.90123s。
我还使用videoAsset.duration
和AVCaptureMovieFileOutput.maxRecordedDuration
设置为requestedTimeToleranceBefore
来获得确切的最后一帧,因为没有它们,它将给我带来完全不同的帧。
到目前为止一切都很好。当我在<= 5s的任何时间停止记录,因此尚未达到限制时,copyCGImage方法将成功返回我的cgImage。 遇到maxRecordedDuration时不是这种情况,在这种情况下,copyCGImage方法每次都会引发带有“无法打开”消息的异常。如果我删除那两个能给我确切的最后一帧的公差选项,则不会发生这种情况,但是我需要它们在那。
为什么会这样?与已录制视频文件的已达到和未达到的限制有什么区别?看起来当达到限制时,最后几帧损坏并且无法使用。但是,无论如何,对此有任何明确的解释吗?还有其他人遇到过这个问题吗?我该如何解决?
结论和明确的问题:达到maxRecordedDuration限制后,如何使用AVKit获取录制视频的最后一帧?
谢谢。
下面的示例代码:
requestedTimeToleranceAfter