2012-11-10 8 views
6

私はAVCaptureSessionの中にいるので、キャプチャされるフレームの番号を知る必要があります。AVCaptureSessionフレームがグラブされたときの正確なタイムスタンプ

キャプチャが開始されると、フレーム番号カウンタをゼロにリセットします。したがって、最初のフレームのタイムスタンプはゼロになります。後続のフレームは、例えば、このようなキャプチャのタイムスタンプを持っています:

0 
0.033 
0.066 
0.099 
etc 

が、フレームがドロップすることができ、わずかな違いが起こる可能性があるため、これらは、正確な数値ではありません。フレームがキャプチャされた正確な時刻を知る必要があります。

I持って、私はフレームのCMTIMEを入手し、使用してコンソールにそれを印刷することができ、このメソッドの内部フレームがつかんされるたびに呼び出され、このメソッド...

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 

CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 
NSLog(@"%lld", timestamp.value); 

が、これは私に

156317265588132 
156317307247388 
156317348909678 
156317390573453 
156317432230603 

1 NUMの違いのような野生の数字を与えます次のフレームはフレームがつかまれたときの小数点以下の桁数を秒単位で表していない41,659,256です。

Iは、25のフレームのために同じになり

NSLog(@"%lld", timestamp.value/timestamp.timescale); 

番号を使用して、タイムスケールすることによって、この数字を分割し、完全な第二に達したときにのみ変更される場合。

フレームがグラブされたときの小数点以下の正確なタイムスタンプを秒単位で取得するにはどうすればよいですか?ありがとう。

+0

私はこの、値を取得しようとしましたが、それは私に間違った値ではなく現在のタイムスタンプ –

+1

CMTimeGetSeconds(タイムスタンプ)を得た – Sten

答えて

8

この数値をタイムスケールで除算すると、数値は25フレームで同じになり、1秒に達すると変更されます。

整数除算が切り詰められるためです。どの程度

NSLog(@"%f", (float)timestamp.value/timestamp.timescale); 
+1

私はこの、値を取得しようとしましたが、それは私に間違った値ではなく現在のタイムスタンプを与えました –

関連する問題