Jestem w trakcie sesji AVCaptureSession i potrzebuję znać numer przechwyconej ramki.Dokładny datownik AVCaptureSession po chwyceniu ramki
Po rozpoczęciu przechwytywania zresetuję licznik numerów klatek na zero. Zatem znacznik czasu pierwszej klatki będzie wynosił zero. Kolejne ramki będą miały znaczniki czasu przechwytywania tak, na przykład:
0
0.033
0.066
0.099
etc
ale nie są to dokładne liczby, ponieważ ramki mogą zostać usunięte i niewielkie różnice mogą się zdarzyć. Muszę znać dokładny czas przechwycenia ramki.
mam to metoda, która jest wywoływana za każdym razem, gdy ramka jest złapał ...
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
wewnątrz tej metody można uzyskać CMTime z ramy i wydrukować go do konsoli za pomocą:
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
NSLog(@"%lld", timestamp.value);
ale to da mi dzikie numery jak
156317265588132
156317307247388
156317348909678
156317390573453
156317432230603
różnica między jednym num ber i następny to około 41.659.256, który nie wydaje się reprezentować czasu w sekundach z miejscami po przecinku, gdy ramka jest chwytana.
jeśli podzielenie tej liczby przez czasowych używając
NSLog(@"%lld", timestamp.value/timestamp.timescale);
numery będą takie same dla 25 ramek i zmiany tylko po osiągnięciu pełnej sekundy.
Jak uzyskać dokładny datownik w sekundach z miejscami dziesiętnymi po chwyceniu ramki? dzięki.
próbowałem dostać ten, wartość, ale dał mi złą wartość nie aktualny timestamp –
CMTimeGetSeconds (timestamp) – Sten