如何记录使用 AVCaptureSession 捕获的第一个和最后一个电影帧的确切时间?

Posted

技术标签:

【中文标题】如何记录使用 AVCaptureSession 捕获的第一个和最后一个电影帧的确切时间?【英文标题】:How to record the exact time of the first and last movie frame captured with AVCaptureSession? 【发布时间】:2015-12-01 18:04:39 【问题描述】:

我正在使用AVCaptureSession 将视频捕获到电影文件中。我想获得电影第一帧和最后一帧的确切时间戳。我该怎么做?

AVCaptureFileOutputRecordingDelegate 中,方法captureOutput(_:didStartRecordingToOutputFileAtURL:fromConnections:) 在电影录制开始时被调用,但它对我的目的来说太不准确了,录制结束时的回调也是如此。我需要帧的确切时间戳。

AVCaptureVideoDataOutputSampleBufferDelegate 中,方法captureOutput:didOutputSampleBuffer:fromConnection: 被每帧调用一次,可用于访问帧的显式时间戳信息,因此应该非常准确。

不幸的是,您似乎无法将捕获会话配置为同时录制到视频文件并提供原始样本数据,因此我无法在捕获到文件的同时使用它来获取帧时间戳。

或者有什么方法可以同时使用它们吗?还是我错过了另一个我可以使用的 API?

【问题讨论】:

【参考方案1】:

FWIW,我就这个问题向 Apple 提出了开发者技术支持票,以获得最终答案。

Apple 工程师确认无法同时访问这两个 API。因此,如果您想要准确的时间戳并录制视频文件,则需要符合AVCaptureVideoDataOutputSampleBufferDelegate 并自己构建文件。

【讨论】:

以上是关于如何记录使用 AVCaptureSession 捕获的第一个和最后一个电影帧的确切时间?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:AVCaptureSession 不会录制超过 11 秒的音频 [重复]

向 AVCaptureSession 添加音频输入会停止 AVPlayer

如何在 Swift 中使用 AVCaptureSession 捕获图片?

如何在 AVCaptureSession 上设置音频采样率?

如何正确清理 AVCaptureSession 和 AVCaptureVideoPreviewLayer

如何正确释放 AVCaptureSession