У меня есть приложение для камеры, где я пытаюсь ограничить длину захвата до точно 15 секунд.NSTimer дает неточные результаты
Я пробовал два разных подхода, и ни один из них не работает на мое удовлетворение.
Первый подход заключается в огнь повторяющегося таймера каждую секунды:
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countTime:) userInfo:[NSDate date] repeats:YES];
- (void)countTime:(NSTimer*)sender {
NSDate *start = sender.userInfo;
NSTimeInterval duration = [[NSDate date] timeIntervalSinceDate:start];
NSInteger time = round(duration);
if (time > 15) {
[self capture:nil]; // this stops capture
}
}
это дает мне 15-секундное видео 8/10 раз, с периодическим 16 вторым ... и я попробовал смесь из NSTimeInterval двойных и закругленное целое здесь, без видимой разницы ...
второго подход заключается в раз огня селектора после требуемой продолжительности, например, так:
self.timer = [NSTimer scheduledTimerWithTimeInterval:15.0f target:self selector:@selector(capture:) userInfo:nil repeats:NO];
это просто вызывает метод захвата - который останавливает захват камеры - напрямую, и дает мне те же результаты ...
Есть ли что-то, что я пропускаю здесь?
Теперь, потому что я испытал с числом подредактированны значений с плавающей точкой в качестве колпачка (14,5, 15,0, 15,1, 15,5, 16,0 и т.д.), и я почти всегда видеть 16 второй видео после нескольких попыток, я я начинаю задаваться вопросом, является ли это просто AVFoundation, взяв второй, чтобы сбросить буфер ... ???
Не знаете, что это за *, для этого, но это не 'NSTimer': http: // stackoverflow.com/questions/11835023/nstimer-precision – Linuxios
Возможно, вы можете просто обрезать видео до 15 секунд и просто остаться с простым NSTimer. – Linuxios
@ Linuxios да, это, вероятно, правильный вариант .... –