मैं एवी कैप्चर सत्र के अंदर हूं और मुझे कब्जा कर लिया गया फ्रेम की संख्या जानने की आवश्यकता है।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,65 9, 256 है जो फ्रेम को पकड़ने पर दशमलव स्थानों के साथ सेकंड में एक समय का प्रतिनिधित्व नहीं करता है।
अगर मैं timescale द्वारा इस संख्या को विभाजित,
NSLog(@"%lld", timestamp.value/timestamp.timescale);
नंबर का उपयोग कर 25 फ्रेम के लिए ही होगा और जब एक पूर्ण दूसरे तक पहुँच जाता है केवल बदल जाएगा।
फ्रेम को पकड़ने पर दशमलव स्थानों के साथ सेकंड में सटीक समय टिकट कैसे प्राप्त किया जा सकता है? धन्यवाद।
मैं इस, मूल्य पाने की कोशिश की है, लेकिन यह मुझे एक गलत मान नहीं दिया वर्तमान टाइमस्टैम्प –
CMTimeGetSeconds (टाइमस्टैम्प) – Sten