CMSampleBuffer 的样本呈现时间代表啥?

Posted

技术标签:

【中文标题】CMSampleBuffer 的样本呈现时间代表啥?【英文标题】:What does a CMSampleBuffer's sample presentation time represent?CMSampleBuffer 的样本呈现时间代表什么? 【发布时间】:2015-11-25 19:40:37 【问题描述】:

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

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

【问题讨论】:

您能否发布您看到返回为 93 小时的示例 CMTime 值? @JAL 这是以秒为单位的表示:347851.930463783... 和 CMTime 表示:value = 347957883945123, timescale = 1000000000 【参考方案1】:

它基于马赫时间,这意味着自上次重启以来的滴答数。您可以使用以下代码创建这样的 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();

【讨论】:

感谢您的回答!它满足我的需要:)。但是你能再解释一下你在那里使用的公式吗?以及为什么时间刻度是 1000000000。

以上是关于CMSampleBuffer 的样本呈现时间代表啥?的主要内容,如果未能解决你的问题,请参考以下文章

原始音频文件中的样本字节是啥意思?

如何将 Int16 音频样本的数据转换为浮点音频样本数组

pvaluesummary*代表啥

从CMSampleBuffer获取曝光时间(EXIF)

CIDetector 在处理 CMSampleBuffer 时崩溃

如何在 Swift 中将 CMSampleBuffer 转换为数据?