2015-06-04 8 views
9

Xcode/iOS 8/AVFoundation संबंधी त्रुटि बाधित:iOS: में __connection_block_invoke_2 त्रुटि: कनेक्शन कंसोल में

error in __connection_block_invoke_2: Connection interrupted 

मैं सिर्फ एप्पल के नमूना एप्लिकेशन पर AVCaptureVideoDataOutput द्वारा जोड़ा जा रहा 'AVCamManualUsingtheManualCaptureAPI'

क्या मैं जोड़ा था:

// CoreImage wants BGRA pixel format 
    NSDictionary *outputSettings = @{ (id)kCVPixelBufferPixelFormatTypeKey : [NSNumber numberWithInteger:kCVPixelFormatType_32BGRA]}; 

    // create and configure video data output 
    AVCaptureVideoDataOutput *videoDataOutput = [[AVCaptureVideoDataOutput alloc] init]; 
    videoDataOutput.videoSettings = outputSettings; 
    videoDataOutput.alwaysDiscardsLateVideoFrames = YES; 
    [videoDataOutput setSampleBufferDelegate:self queue:sessionQueue]; 

टुकड़ा ऊपर नमूना परियोजना में सम्मिलित:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

    self.recordButton.layer.cornerRadius = self.stillButton.layer.cornerRadius = self.cameraButton.layer.cornerRadius = 4; 
    self.recordButton.clipsToBounds = self.stillButton.clipsToBounds = self.cameraButton.clipsToBounds = YES; 

    // Create the AVCaptureSession 
    AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
    [self setSession:session]; 

    // Set up preview 
    [[self previewView] setSession:session]; 

    // Check for device authorization 
    [self checkDeviceAuthorizationStatus]; 

    // In general it is not safe to mutate an AVCaptureSession or any of its inputs, outputs, or connections from multiple threads at the same time. 
    // Why not do all of this on the main queue? 
    // -[AVCaptureSession startRunning] is a blocking call which can take a long time. We dispatch session setup to the sessionQueue so that the main queue isn't blocked (which keeps the UI responsive). 

    dispatch_queue_t sessionQueue = dispatch_queue_create("session queue", DISPATCH_QUEUE_SERIAL); 
    [self setSessionQueue:sessionQueue]; 

    dispatch_async(sessionQueue, ^{ 
     [self setBackgroundRecordingID:UIBackgroundTaskInvalid]; 

     NSError *error = nil; 

     AVCaptureDevice *videoDevice = [AAPLCameraViewController deviceWithMediaType:AVMediaTypeVideo preferringPosition:AVCaptureDevicePositionBack]; 
     AVCaptureDeviceInput *videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error]; 

     if (error) 
     { 
      NSLog(@"%@", error); 
     } 

     [[self session] beginConfiguration]; 

     if ([session canAddInput:videoDeviceInput]) 
     { 
      [session addInput:videoDeviceInput]; 
      [self setVideoDeviceInput:videoDeviceInput]; 
      [self setVideoDevice:videoDeviceInput.device]; 

      dispatch_async(dispatch_get_main_queue(), ^{ 
       // Why are we dispatching this to the main queue? 
       // Because AVCaptureVideoPreviewLayer is the backing layer for our preview view and UIView can only be manipulated on main thread. 
       // Note: As an exception to the above rule, it is not necessary to serialize video orientation changes on the AVCaptureVideoPreviewLayer’s connection with other session manipulation. 

       [[(AVCaptureVideoPreviewLayer *)[[self previewView] layer] connection] setVideoOrientation:(AVCaptureVideoOrientation)[self interfaceOrientation]]; 
      }); 
     } 

     AVCaptureDevice *audioDevice = [[AVCaptureDevice devicesWithMediaType:AVMediaTypeAudio] firstObject]; 
     AVCaptureDeviceInput *audioDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error]; 

     if (error) 
     { 
      NSLog(@"%@", error); 
     } 

     if ([session canAddInput:audioDeviceInput]) 
     { 
      [session addInput:audioDeviceInput]; 
     } 

     AVCaptureMovieFileOutput *movieFileOutput = [[AVCaptureMovieFileOutput alloc] init]; 
     if ([session canAddOutput:movieFileOutput]) 
     { 
      [session addOutput:movieFileOutput]; 
      AVCaptureConnection *connection = [movieFileOutput connectionWithMediaType:AVMediaTypeVideo]; 
      if ([connection isVideoStabilizationSupported]) 
      { 
       [connection setEnablesVideoStabilizationWhenAvailable:YES]; 
      } 
      [self setMovieFileOutput:movieFileOutput]; 
     } 

     AVCaptureStillImageOutput *stillImageOutput = [[AVCaptureStillImageOutput alloc] init]; 
     if ([session canAddOutput:stillImageOutput]) 
     { 
      [stillImageOutput setOutputSettings:@{AVVideoCodecKey : AVVideoCodecJPEG}]; 
      [session addOutput:stillImageOutput]; 
      [self setStillImageOutput:stillImageOutput]; 
     } 
      // CoreImage wants BGRA pixel format 
NSDictionary *outputSettings = @{ (id)kCVPixelBufferPixelFormatTypeKey : [NSNumber numberWithInteger:kCVPixelFormatType_32BGRA]}; 

// create and configure video data output 
AVCaptureVideoDataOutput *videoDataOutput = [[AVCaptureVideoDataOutput alloc] init]; 
videoDataOutput.videoSettings = outputSettings; 
videoDataOutput.alwaysDiscardsLateVideoFrames = YES; 
[videoDataOutput setSampleBufferDelegate:self queue:sessionQueue]; 

     [[self session] commitConfiguration]; 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self configureManualHUD]; 
     }); 
    }); 

    self.manualHUDFocusView.hidden = YES; 
    self.manualHUDExposureView.hidden = YES; 
    self.manualHUDWhiteBalanceView.hidden = YES; 
} 

मैं 'त्रुटि __connection_block_invoke_2 में: कनेक्शन बाधित हुआ' हो जाते हैं और भी ...

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

..delegate कभी नहीं कहा जाता हो जाता है।

मैं बस इतना करना चाहता हूं कि लाइव कोर फ़िल्टर करने के लिए उनके कोड को संशोधित करें।

+1

डुप्ली की तरह नहीं लगता है क्योंकि दो उत्तरों काफी अलग हैं। यह प्रश्न समस्या के एक विशिष्ट संस्करण के लिए एक फिक्स पर केंद्रित है जबकि दूसरा प्रश्न क्यों पर केंद्रित है। – Crashalot

+0

हां यह एक डुप्लिकेट नहीं है और ऊपर उल्लिखित प्रश्न पूछताछकर्ता द्वारा भी स्वीकार नहीं किया जाता है। –

+0

अन्य प्रश्न का उत्तर केवल "स्मृति स्मृति चेतावनी प्राप्त" के बारे में बताता है, "__connection_block_invoke_2 में त्रुटि" के बारे में नहीं। – RenniePet

उत्तर

6

इसलिए मैंने इस मुद्दे को ठीक किया।

आप AVCaptureMovieFileOutput और AVCaptureVideoDataOutput एक साथ उपयोग नहीं कर सकते हैं। मैंने AVCaptureMovieFileOutput निकाला, और AVCaptureVideoDataOutput प्रतिनिधि को बुलाया जाता है।

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