2012-11-10 12 views
6

Tôi đang ở trong AVCaptureSession và tôi cần biết số khung đang được chụp.AVCaptureXác định thời gian chính xác khi khung được chụp

Khi bắt đầu chụp, tôi sẽ đặt lại bộ đếm số khung thành không. Vì vậy, dấu thời gian của khung đầu tiên sẽ bằng không. Các khung tiếp theo sẽ có các dấu thời gian chụp như thế này, ví dụ:

0 
0.033 
0.066 
0.099 
etc 

nhưng đây không phải là con số chính xác, vì khung có thể bị giảm và sự khác biệt nhỏ có thể xảy ra. Tôi cần biết chính xác thời gian khi một khung hình được chụp.

tôi có phương pháp này được gọi là mỗi khi một khung được nắm lấy ...

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

bên trong phương pháp này tôi có thể có được CMTime của một khung và in nó ra cửa sổ Console sử dụng:

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

nhưng điều này sẽ cung cấp cho tôi số hoang dã như

156317265588132 
156317307247388 
156317348909678 
156317390573453 
156317432230603 

sự khác biệt giữa một num ber và tiếp theo là khoảng 41,659,256 mà dường như không đại diện cho một thời gian trong vài giây với số thập phân khi khung được lấy.

nếu tôi chia số này bằng các khoảng thời gian, sử dụng

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

những con số sẽ giống nhau cho 25 khung hình và sẽ chỉ thay đổi khi một giây đầy đủ là đạt.

Làm cách nào để có được dấu thời gian chính xác tính bằng số giây với số thập phân khi khung được chụp? cảm ơn.

+0

tôi đã cố gắng để có được, giá trị này, nhưng nó đã cho tôi một giá trị sai không dấu thời gian hiện tại –

+1

CMTimeGetSeconds (timestamp) – Sten

Trả lời

8

Nếu tôi chia số này cho khoảng thời gian, các con số sẽ giống nhau cho 25 khung hình và sẽ chỉ thay đổi khi đạt đến toàn bộ giây.

Vì phân chia số nguyên cắt ngắn. Làm thế nào về

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

tôi đã cố gắng để có được, giá trị này, nhưng nó đã cho tôi một giá trị sai không dấu thời gian hiện tại –