我正在与AVFoundation一起捕获和录制音频。有些问题我不太了解。
基本上,我想从AVCaptureSession中捕获音频并使用AVWriter进行写入,但是我需要对从AVCaptureSession中获得的CMSampleBuffer的时间戳进行一些调整。我阅读了CMSampleBuffer的文档,我看到了两个不同的时间戳术语:“presentation timestamp”和“output present timestamp”。两者有什么不同?
假设我从AVCaptureSession中获得了一个CMSampleBuffer(用于音频)实例,并且我想使用AVWriter将其写入文件,我应该使用什么函数将CMTime“注入(inject)”到缓冲区中以设置其显示时间戳结果文件?
谢谢。
最佳答案
使用CMSampleBufferGetPresentationTimeStamp,这是捕获缓冲区的时间,应在播放时将其“呈现”以使其同步。在WWDC 2012上引用 session 520:“演示时间是缓冲区中的第一个样本被麦克风拾取的时间”。
如果使用以下命令启动AVWriter
[videoWriter startWriting];
[videoWriter startSessionAtSourceTime:CMSampleBufferGetPresentationTimeStamp(sampleBuffer)];
然后将样本附加到
if(videoWriterInput.readyForMoreMediaData) [videoWriterInput appendSampleBuffer:sampleBuffer];
完成视频中的帧将与CMSampleBufferGetPresentationTimeStamp(我已经检查过)一致。如果要在添加样本时修改时间,则必须使用AVAssetWriterInputPixelBufferAdaptor
关于ios - 如何为AVWriter写入设置CMSampleBuffer的时间戳,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14786619/