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... }]; }