CMSampleBuffer 的样本呈现时间代表什么?

What does a CMSampleBuffer's sample presentation time represent?

我们的应用程序使用 AVFoundation 捕获视频,并使用其样本缓冲区显示、操作和导出视频。我试图了解 CMSampleBufferGetPresentationTimeStamp(_:) CMTime 实际代表什么。

例如,当视频捕获开始时,第一个样本的呈现时间是 93 小时 5 分钟。我不明白这个价值从何而来。使用第一个示例的演示时间启动 AVAssetWriter 会话,在视频播放开始之前创建 93 小时的黑帧。

它基于马赫时间,这意味着自上次重启以来的滴答数。您可以使用以下代码创建这样的 CMTime:

  mach_timebase_info_data_t timeInfo;
  mach_timebase_info(&timeInfo);
  CMTime time = CMTimeMake(mach_absolute_time() * timeInfo.numer / timeInfo.denom, 1000000000);

或使用此方法将其转换为秒数。
double seconds = CACurrentMediaTime();