CaptureStillImageAsynchronouslyFromConnection用于后置摄像头

let VideoDevice = CameraWithPosition(AVCaptureDevicePosition.Back) // not working let VideoDevice = CameraWithPosition(AVCaptureDevicePosition.Front) // working 

 if let stillOutput = self.stillImageOutput { if let videoConnection = stillOutput.connectionWithMediaType(AVMediaTypeVideo) { println("stillOutput \(stillOutput)") stillOutput.captureStillImageAsynchronouslyFromConnection(videoConnection){ (imageSampleBuffer : CMSampleBuffer!, _) in println("imageSampleBuffer \(imageSampleBuffer)") //prints nil for back camera, works for front camera ...more code 

我能够从前置摄像头捕获图像,但同样的过程不适用于我的iPhone的后置摄像头,这两个摄像头是否有任何不同的设置?

接收imageSampleBuffer作为返回相机的零。

错误日志:

错误域= AVFoundationErrorDomain代码= -11800“操作无法完成”UserInfo = 0x1704682c0 {NSUnderlyingError = 0x170255d20“操作无法完成(OSStatus错误-16803。)”,NSLocalizedFailureReason =发生未知错误(-16803 ),NSLocalizedDescription =操作无法完成}

检查“…更多代码”

frontcamera会更快地返回图像,所以如果你在captureStillImageAsynchronouslyFromConnection之后直接停止预览或者直接对videoConnection进行其他的修改,它可能适用于前置摄像头,但不适用于后置摄像头。

尝试

 NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for (AVCaptureDevice *device in videoDevices) { NSLog(device.description); } 

看看你是否收到这样的消息:

 AVCaptureFigVideoDevice: hex[Back Camera][com.apple.avfoundation.avcapturedevice.built-in_video:0] 

当我无法使用相机时,我遇到了一个问题,它不会出现在设备列表中。 然后我注意到,即使是标准的相机应用程序不会工作。 所以我只是重新加载我的iPad,它解决了我的问题。 我认为,在testing我的应用程序时,我设法改变了一些重要的东西。

我的解决scheme: captureStillImageAsynchronouslyFromConnection是在capturePhoto方法。

地址:

 if(!CMSampleBufferIsValid(imageSampleBuffer)) { [self capturePhoto]; return; } 

方法似乎是这样的:

  - (void) capturePhoto { ...SOME CODE... [_stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) { if(!CMSampleBufferIsValid(imageSampleBuffer))//Check if capture failed { [self capturePhoto]; return; } ...SOME CODE... }]; }