3

场景:
我正在编写一个iOS 应用程序来尝试解码videoFile.mp4. 我正在使用AVAssetReaderTrackOutputAVAssetReader来解码视频文件中的帧。这很好用。videoFile.mp4我基本上使用以下核心逻辑来获得每一帧。

代码:

AVAssetReader * videoFileReader;
AVAssetReaderTrackOutput * assetReaderOutput = [videoFileReader.outputs objectAtIndex:0];
CMSampleBufferRef sampleBuffer = [assetReaderOutput copyNextSampleBuffer];

sampleBuffer是这里每个视频帧的缓冲区。

问题:

  • 如何在这里获取每个视频帧的时间戳?
  • 换句话说&更详细,我怎样才能得到每个sampleBuffer我返回的时间戳copyNextSampleBuffer

PS:
请注意,我需要以毫秒为单位的时间戳。

4

1 回答 1

2

我终于得到了我的问题的答案。以下2行可以获得返回的帧时间戳sampleBuffercopyNextSampleBuffer

CMTime frameTime = CMSampleBufferGetOutputPresentationTimeStamp(sampleBuffer);
double frameTimeMillisecs = CMTimeGetSeconds(frameTime) * 1000;

时间戳在 中返回seconds。因此将其乘以1000转换为milliseconds

于 2018-01-28T13:44:00.360 回答