块的示例代码从这里:http://www.gdcl.co.uk/2013/02/20/iPhone-Pause.html CMSampleBufferRef样品 - 是您sampleBuffer,CMSampleBufferRef SOUT你的输出。 NewTimeStamp是你的时间戳。
CMItemCount count;
CMTime newTimeStamp = CMTimeMake(YOURTIME_GOES_HERE);
CMSampleBufferGetSampleTimingInfoArray(sample, 0, nil, &count);
CMSampleTimingInfo* pInfo = malloc(sizeof(CMSampleTimingInfo) * count);
CMSampleBufferGetSampleTimingInfoArray(sample, count, pInfo, &count);
for (CMItemCount i = 0; i < count; i++)
{
pInfo[i].decodeTimeStamp = newTimeStamp; // kCMTimeInvalid if in sequence
pInfo[i].presentationTimeStamp = newTimeStamp;
}
CMSampleBufferRef sout;
CMSampleBufferCreateCopyWithNewTiming(kCFAllocatorDefault, sample, count, pInfo, &sout);
free(pInfo);
来源
2013-03-02 06:06:17
Laz
为什么当你对答案不感兴趣时,你会问一个问题? – Sten 2013-02-14 11:17:17
我需要设置CMSampleBuffer的时间戳,因为我想暂时记录会话。我结束了使用CMSampleBufferCreateCopyWithNewTiming。我想知道是否有直接的方法来注入现有缓冲区的时间戳,所以我不需要复制它。 – 2013-02-17 10:52:07
我无法使用AVAssetWriterInputPixelBufferAdaptor,因为它只适用于视频流。 – 2013-02-17 14:14:18