Я нахожусь внутри AVCaptureSession, и мне нужно знать номер захватываемого кадра.
Когда начнется захват, я обнулю счетчик количества кадров. Таким образом, временная метка первого кадра будет равна нулю. Последующие кадры будут иметь временные метки захвата, например:
0
0.033
0.066
0.099
etc
но это не точные цифры, потому что кадры могут быть пропущены и могут быть небольшие различия. Мне нужно знать точное время захвата кадра.
У меня есть этот метод, который вызывается каждый раз при захвате кадра...
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
внутри этого метода я могу получить CMTime кадра и вывести его на консоль, используя:
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer );
NSLog(@"%lld", timestamp.value);
но это даст мне дикие числа, например
156317265588132
156317307247388
156317348909678
156317390573453
156317432230603
разница между одним числом и другим составляет около 41 659 256, что, по-видимому, не представляет время в секундах с десятичными знаками, когда кадр захватывается.
если я разделю эти числа на шкалу времени, используя
NSLog(@"%lld", timestamp.value/timestamp.timescale);
числа будут одинаковыми для 25 кадров и изменятся только по достижении полной секунды.
Как получить точную отметку времени в секундах с десятичными разрядами при захвате кадра? благодаря.