2010-12-10 6 views
7

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

- (void)sessionSetupForPhoto 
{ 
[session beginConfiguration]; 
session.sessionPreset = AVCaptureSessionPresetPhoto; 
AVCaptureStillImageOutput *output = [[[AVCaptureStillImageOutput alloc] init] autorelease]; 
for (AVCaptureOutput *output in [session outputs]) { 
    [session removeOutput:output]; 
} 
if ([session canAddOutput:output]){ 
    [session addOutput:output]; 
} else { 
    NSLog(@"Not able to add an AVCaptureStillImageOutput"); 
} 
[session commitConfiguration]; 
} 

मैं लगातार सिर्फ commitConfiguration लाइन है कि इस तरह दिखता है के बाद एक त्रुटि संदेश प्राप्त हो रहा: (ऐसा कहा जा सकता है , मैं अपने पंजीकृत पर्यवेक्षक को भेजे गए एक AVCaptureSessionRuntimeErrorNotification)

Received an error: NSConcreteNotification 0x19d870 {name = AVCaptureSessionRuntimeErrorNotification; object = ; userInfo = { AVCaptureSessionErrorKey = "Error Domain=AVFoundationErrorDomain Code=-11800 \"The operation couldn\U2019t be completed. (AVFoundationErrorDomain error -11800.)\" UserInfo=0x19d810 {}";

XCode में प्रलेखन जाहिरा तौर पर त्रुटि संख्या (-11,800), के लिए अधिक जानकारी प्रदान करता हो रही है "AVErrorUnknown - त्रुटि के लिए कारण अज्ञात है।";

पहले मैंने स्टॉप करने और शुरू करने के लिए कॉल करने का भी प्रयास किया था, लेकिन डब्ल्यूडब्ल्यूडीसी सत्र 40 9 देखने के बाद ऐसा नहीं किया गया, जहां यह निराश हो गया। जब मैं रोक रहा था और शुरू कर रहा था, तो मुझे एक अलग त्रुटि संदेश मिल रहा था -11819, जो "AVErrorMediaServicesWereReset" से मेल खाता है - ऑपरेशन पूरा नहीं हो सका क्योंकि मीडिया सेवाएं अनुपलब्ध हो गईं। ", जो कि" अज्ञात "की तुलना में काफी अच्छी है, लेकिन जरूरी नहीं कोई और सहायक

यह सफलतापूर्वक AVCaptureStillImageOutput जोड़ता है (यानी, लॉग संदेश को उत्सर्जित नहीं करता है)।

मैं (w/4.1) एक iPhone 3 जी पर परीक्षण कर रहा हूँ और iPhone 4.

इस कॉल मुख्य थ्रेड, जो भी है, जहां अपने मूल AVCaptureSession सेटअप जगह ले ली में हो रहा है।

मैं त्रुटि से कैसे बच सकता हूं? तस्वीर लेने के लिए मैं उच्च रिज़ॉल्यूशन पर कैसे जा सकता हूं?

धन्यवाद!

+0

मैं एक ही त्रुटि पर अटक कर रहा हूँ। क्या आपको कामकाज मिला? –

उत्तर

2

चूंकि आप AVCaptureSession से बाहर आने वाले वीडियो डेटा को संसाधित कर रहे हैं, इसलिए मुझे लगता है कि sessionSetupForPhoto को कॉल करने से पहले आपके पास एक AVCaptureVideoDataOutput जुड़ा हुआ है। didOutputSampleBuffer:

यदि हां, तो क्या आप captureOutput में क्या कर रहे हैं पर विस्तृत कर सकते हैं? अधिक देखने में सक्षम होने के बिना, मुझे लगता है कि पुराने आउटपुट को हटाने और बाद में फोटो गुणवत्ता प्रीसेट को सेट करने में कोई समस्या हो सकती है।

इसके अलावा, उत्पादन चर आप पुनरावर्तक के रूप में प्रयोग कर रहे हैं जब आप अपने आउटपुट को दूर अभी भी छवि उत्पादन छिपा है। कोई समस्या नहीं है, लेकिन यह कोड को पढ़ने के लिए थोड़ा कठिन बनाता है।

1

सत्र स्विच करने की कोई आवश्यकता नहीं है। बस प्रारंभ पर अपने सत्र के लिए AVCaptureStillImageOutput जोड़ सकते हैं और निम्नलिखित फोन जब आप के बारे में छवि पर कब्जा है और उसके अनुसार CMSampleBufferRef उपयोग करने के लिए कर रहे हैं:

captureStillImageAsynchronouslyFromConnection:videoConnection 
    completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) 
{ 
} 
+0

ध्यान दें कि यदि आप आईओएस 4.3 या उच्चतम पर AVCaptureSessionPresetPhoto के सत्र प्रीसेट के लिए ऐसा करते हैं तो आपको केवल वीडियो पूर्वावलोकन फ़ीड प्राप्त होगा। पुराने आईओएस संस्करण फोटो प्रीसेट के लिए वीडियो पूर्वावलोकन प्राप्त करने का समर्थन नहीं करते हैं, इसलिए आपको उन पुराने आईओएस संस्करणों पर पूर्वावलोकन करते समय पूर्ण आकार की तस्वीर को कैप्चर करने के लिए थोड़ा और काम करना होगा। –

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