iOS:__connection_block_invoke_2中的错误:连接中断
发布时间:2020-12-15 01:40:38 所属栏目:百科 来源:网络整理
导读:参见英文答案 What is “error in __connection_block_invoke_2: Connection interrupted” in iOS?????????????????????????????????????1个 控制台中的Xcode / iOS 8 / AVFoundation相关错误: error in __connection_block_invoke_2: Connection interrup
参见英文答案 >
What is “error in __connection_block_invoke_2: Connection interrupted” in iOS?????????????????????????????????????1个
控制台中的Xcode / iOS 8 / AVFoundation相关错误: error in __connection_block_invoke_2: Connection interrupted 我只是将AVCaptureVideoDataOutput添加到Apple的示例应用程序’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永远不会被调用. 我要做的就是修改他们的代码来做现场核心图像过滤器. 解决方法
所以我解决了这个问题.
您不能同时使用AVCaptureMovieFileOutput和AVCaptureVideoDataOutput.我取出了AVCaptureMovieFileOutput,并调用了AVCaptureVideoDataOutput委托. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |