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作为nil接收..
错误日志:
错误域= AVFoundationErrorDomain代码= -11800"操作无法完成" UserInfo = 0x1704682c0 {NSUnderlyingError = 0x170255d20"操作无法完成。 (OSStatus错误-16803。)",NSLocalizedFailureReason =发生未知错误(-16803),NSLocalizedDescription =操作无法完成}
答案 0 :(得分:1)
检查 “......更多代码”
前置摄像头将更快地返回图像,因此如果您在captureStillImageAsynchronouslyFromConnection之后停止预览或直接对videoConnection进行其他更改,则它可能适用于前置摄像头,但不适用于后置摄像头。
答案 1 :(得分:0)
尝试
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,它解决了我的问题。我认为在测试我的应用程序时,我设法以某种方式改变了重要的东西。
答案 2 :(得分:-1)
我的解决方案:
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...
}];
}
方法似乎是这样的:
{{1}}