我正在使用
AVCaptureSession
将视频捕获到电影文件中。我想获得电影第一帧和最后一帧的确切时间戳。我该怎么做?
在
AVCaptureFileOutputRecordingDelegate
中,当影片录制开始时会调用captureOutput(_:didStartRecordingToOutputFileAtURL:fromConnections:)
方法,但对于我的目的来说,它太不准确了,录制结束时的回调也是如此。我需要该帧的确切时间戳。
在
AVCaptureVideoDataOutputSampleBufferDelegate
中,每帧都会调用方法 captureOutput:didOutputSampleBuffer:fromConnection:
,并且可用于访问该帧的显式时间戳信息,因此应该非常准确。
不幸的是,您似乎无法配置捕获会话来同时记录到视频文件并提供原始样本数据,因此我无法使用它来获取帧时间戳,同时也捕获到文件。
或者有什么方法可以同时使用它们吗?或者我是否缺少另一个可以使用的 API?
FWIW,我就这个问题向Apple提出了开发者技术支持票,以获得最终答案。
Apple 工程师确认无法同时访问这两个 API。因此,如果您想要精确的时间戳并录制视频文件,那么您需要遵守
AVCaptureVideoDataOutputSampleBufferDelegate
并自己构建文件。
不幸的是,您似乎无法配置捕获会话来 同时录制到视频文件并提供原始样本数据, 所以我不能使用它来获取帧时间戳,同时也捕获到 文件。
关于此声明 - 确实可以创建一个同时具有 AVCaptureMovieFileOutput 和 AVCaptureVideoDataOutput 的捕获会话。然后就可以使用数据输出CMSampleBuffer的presentationTime来计算视频中对应的帧时间,包括第一帧和最后一帧时间。