2010-08-18 18 views
12

मैं एक ऐप्स है कि उपयोगकर्ताओं को iPhone कैमरे का उपयोग कर तस्वीरें स्नैप करने के लिए अनुमति देता है का निर्माण कर रहा हूँ, और AVFoundation के उपयोग कर रहा हूँ जब यह उपलब्ध (iOS4) है, तो उन के लिए टैप फोकस सुविधा का उपयोग कर सकते हैं, यहां तक ​​कि साथ एक कस्टम ओवरले।तुरंत फ्रीज फ्रेम एक AVCaptureSession

समस्या मैं आ रही है कि captureStillImageAsynchronouslyFromConnection पूर्ण होने में कुछ सेकंड लेता है, जहां वीडियो अब भी है जिसके दौरान मैं फ्रेम फ्रीज करने के मुख्य वीडियो फ़ीड तो वहाँ एक भ्रामक राज्य नहीं है करना चाहते हैं चल रहा है, लेकिन उपयोगकर्ता ने एक तस्वीर छीन ली है (और कैमरा शटर ध्वनि बंद हो गई है)।

मैं बुला [सत्र stopRunning] मैं एक अभी भी छवि पर कब्जा का अनुरोध सही होने के बाद की कोशिश की है, लेकिन इस अप्रत्याशित परिणाम की ओर जाता है; अभी भी छवि समापन ब्लॉक अक्सर उस मामले में निकाल दिया नहीं जाता है।

कैसे मैं वीडियो पूर्वावलोकन परत "ठहराव" हो सकता है पर कोई भी विचार जैसे ही शटर मारा जाता है?

+0

मुझे भी, मैं दूसरे को देखा है सिफारिश की है कि सत्र डिस्कनेक्ट करें, फिर कैमरा पूरी तरह से टूटी हुई है और अस्थिर है। – RainCast

उत्तर

5

मैं वही बात कर रहा हूं। यद्यपि मेरे मामले में कैप्चरस्टिल इमेजएसिंक्रोनसफ्रॉम कनेक्शन वापस आने के लिए 0.5 सेकंड लेते हैं, तो हो सकता है कि आप पूरा करने वाले हैंडलर में कुछ प्रोसेसिंग कर रहे हों?

अगर ऐसी बात है, मैं 2 विकल्प, जो दोनों के मेरे लिए पर्याप्त नहीं हैं के साथ आया था, लेकिन आप

के लिए कर सकते हैं क्या मैं के साथ या तो आया:
* फोन stopRunning कैप्चर सत्र पर कैप्चर सत्र पर (फिर से, मेरे मामले में 0.5 सेकंड) कहा जाता है, और उसके बाद कॉल प्रसंस्करण के बाद फिर से शुरू होता है।
* ओवरले के शीर्ष पर एक UIImageView है, और जब आप अपनी प्रसंस्करण कर रहे हों तो इस छविदृश्य में कैमरा या वीडियो स्ट्रीम से ली गई अंतिम तस्वीर को स्टोर करें।

दोनों समाधानों से मुझे निराश किया गया था कि वे दोनों प्रक्रिया में कुछ सेकंड जोड़ते हैं। लेकिन मुझे उम्मीद है कि यह मदद करता है, या एक दिशा देता है।

चीयर्स, Oded।

+0

कई कोशिशों के बाद यह सही जवाब है। – RainCast

4

सरल फ्रीज-फ़्रेमिंग उपयोगकर्ता को यह इंप्रेशन देता है कि स्क्रीन पर छवि पहले से ही ली जा चुकी है, जो कम से कम — है, मैं एक मंद छवि दिखाऊंगा। "शटर" बंद करके कैमरा.एप इस मुद्दे के आसपास हो जाता है।

आप 0.5 AVCaptureVideoPreviewLayer अल्फा बदलने के लिए एक मंद छवि का आभास दे, भले ही यह अभी भी चल रहा है कर सकता है।

एक अन्य विकल्प AVCaptureVideoDataOutput और कुछ छवि हेरफेर उपयोग करने के लिए अभी भी छवि प्राप्त करने के लिए है। दुर्भाग्यवश, यह एक ही समय में AVCaptureVideoDataOutput और AVCaptureStillImageOutput दोनों का उपयोग करना संभव नहीं है; अगले वीडियो फ्रेम को पकड़कर "तस्वीर लेना" कार्यक्षमता को कार्यान्वित करना एक कामकाज है (बेशक, यह आपके वीडियो रिज़ॉल्यूशन द्वारा सीमित है, लेकिन अगर आप फ्रेम पर छवि-प्रसंस्करण करना चाहते हैं तो ठीक है)।

0

पुराना उत्तर, लेकिन यहां उत्सुकता के लिए एक अपडेट है: आईओएस 5 में आप एक ही समय में AVCaptureStillImageOutput और AVCaptureVideoDataOutput का उपयोग कर सकते हैं। मेरे पास अगली वीडियो फ्रेम और अभी भी एक छवि को कैप्चर करने के साथ-साथ कुछ सभ्य सफलता मिली। मैं एक साधारण फीड आउट एनीमेशन का उपयोग करता हूं जो यूआई को छुपाता है और फिर जब मैं AVCaptureVideoDataOutput से छवि वापस प्राप्त करता हूं तो वापस फीका होता है।AvCaptureVideoDataOutput से बाहर आने वाली छोटी और निम्न गुणवत्ता वाली छवियों के कारण AVCaptureStillImageOutput के captureStillImageAsynchronouslyFromConnection:completionHandler: के माध्यम से अभी भी छवि के इंतजार की तुलना में यह प्रक्रिया बहुत तेज है।

16

आपको बस अपना कैप्चर करने की आवश्यकता है VideoPreviewLayer.connection.enabled = NO;

जानकारी के लिए कृपया मेरा उत्तर यहाँ देखें:

AVCaptureSession pause?

+0

ने इसे आजमाया, और यह कैमरे में कुछ अजीब व्यवहार की ओर जाता है। – RainCast

+0

अजीब व्यवहार, जिसमें एक तस्वीर लेना शामिल है जो रंग में बहुत नीला दिखता है .... कभी-कभी एक्सपोजर में बहुत अंधेरा होता है। – RainCast

+0

किस आईओएस संस्करण पर आपको उस अजीब व्यवहार मिल गए हैं? – DisableR

संबंधित मुद्दे