Sono all'interno di una AVCaptureSession e ho bisogno di conoscere il numero del frame che viene catturato.Data/ora esatta di AVCaptureSession quando viene afferrato un frame
All'avvio, il reset del contatore del numero di fotogramma viene azzerato. Quindi, il timestamp del primo frame sarà zero. fotogrammi successivi avranno timestamp di cattura in questo modo, per esempio:
0
0.033
0.066
0.099
etc
ma questi non sono numeri esatti, perché i frame possono essere eliminate e lievi differenze possono accadere. Devo sapere l'ora esatta in cui è stato catturato un fotogramma.
ho questo metodo che viene chiamato ogni volta che un frame viene afferrato ...
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
all'interno di questo metodo posso ottenere il CMTime di un telaio e stamparlo utilizzando la console:
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
NSLog(@"%lld", timestamp.value);
ma questo mi darà i numeri selvatici come
156317265588132
156317307247388
156317348909678
156317390573453
156317432230603
la differenza tra un num ber e il prossimo è circa 41.659.256 che non sembra rappresentare un tempo in secondi con cifre decimali quando il frame viene afferrato.
se dividere questo numero per la scala temporale, utilizzando
NSLog(@"%lld", timestamp.value/timestamp.timescale);
numeri sarà lo stesso per 25 fotogrammi e cambierà solamente quando viene raggiunto un secondo intero.
Come ottengo l'ora esatta in secondi con cifre decimali quando viene afferrato un fotogramma? Grazie.
ho cercato di ottenere questo, il valore, ma mi ha dato un valore sbagliato non timestamp corrente –
CMTimeGetSeconds (timestamp) – Sten