我正在尝试以准确的时间戳开始录制视频。
我设法通过使用找到的方法获取每个帧的时间戳:here和here。
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection{
CMTime time = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
...
// check if time > timestampToStart, use these frames
}
通过这样做,我只能使用我指定的时间戳之后的帧。
问题是所使用的第一帧在timstampToStart中不会完全,而是timstampToStart加上一个小间隔,可以在0-1 / fps之间(通常为fps = 24)。 / p>
如何确保使用的第一帧与我想要的时间戳完全(或非常接近)
答案 0 :(得分:0)
如果您需要时间要求严格的功能,请使用NSThread
:
- (IBAction)startCapture:(id) sender
{
NSDate * startTime = [now dateByAddingTimeInterval: 10.12345];
NSThread * thread = [[NSThread alloc] initWithTarget:self selector:@selector(capture:) object:startTime];
[thread start];
}
- (void)capture:(id) context
{
NSDate * startTime = (NSDate *) context;
[NSThread sleepUntilDate:startTime];
// Do your things...
}
线程将在设置时间的几纳秒内唤醒,除非CPU非常繁忙。但是,创建一个线程需要一些时间,所以不要如此密切地设置开始时间。 OS X上的线程创建时间约为~90 microseconds。Apple没有说iOS上有多长时间。