使用XCode-6.4,iOS-8.4.1:
使用AVCaptureSession,我想进一步缩小(就像iPhone相机可能管理的那样!)
我已经使用" setVideoZoomFactor"方法设置等于1(=允许的最小值)。这非常有效(请参阅底部的代码示例...)。但后来我做了以下观察(认识到照相模式的相机可能设法比在视频模式下进一步缩放):
处于照片模式的iPhone相机显示的变焦与视频模式下的相机完全不同(至少对于我的iPhone 5S而言)。您可以使用原生"相机应用程序"在你的iPhone上。在PHOTO和VIDEO之间切换,你会发现Photo-mode可能比video-zoomfactor = 1更进一步缩放。怎么可能???
此外,有没有办法实现相同的最小缩放因子,照片模式也可以在iOS下使用AVCam在视频模式下实现????
以下是我5S iPhone的照片模式和视频模式之间缩放差异的说明(见图片):
以下是AVCamViewController的代码:
- (void)viewDidLoad
{
[super viewDidLoad];
// Create the AVCaptureSession
AVCaptureSession *session = [[AVCaptureSession alloc] init];
[self setSession:session];
// Setup the preview view
[[self previewView] setSession:session];
// Check for device authorization
[self checkDeviceAuthorizationStatus];
dispatch_queue_t sessionQueue = dispatch_queue_create("session queue", DISPATCH_QUEUE_SERIAL);
[self setSessionQueue:sessionQueue];
// http://stackoverflow.com/questions/25110055/ios-captureoutputdidoutputsamplebufferfromconnection-is-not-called
dispatch_async(sessionQueue, ^{
self.session = [AVCaptureSession new];
self.session.sessionPreset = AVCaptureSessionPresetMedium;
NSArray *devices = [AVCaptureDevice devices];
AVCaptureDevice *backCamera;
for (AVCaptureDevice *device in devices) {
if ([device hasMediaType:AVMediaTypeVideo]) {
if ([device position] == AVCaptureDevicePositionBack) {
backCamera = device;
}
}
}
NSError *error = nil;
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:backCamera error:&error];
if (error) {
NSLog(@"%@",error);
}
if ([self.session canAddInput:input]) {
[self.session addInput:input];
}
AVCaptureVideoDataOutput *output = [AVCaptureVideoDataOutput new];
[output setSampleBufferDelegate:self queue:sessionQueue];
output.videoSettings = @{(id)kCVPixelBufferPixelFormatTypeKey:@(kCVPixelFormatType_32BGRA)};
if ([self.session canAddOutput:output]) {
[self.session addOutput:output];
}
// Apply initial VideoZoomFactor to the device
NSNumber *DefaultZoomFactor = [NSNumber numberWithFloat:1.0];
if ([backCamera lockForConfiguration:&error])
{
// HERE IS THE ZOOMING DONE !!!!!!
[backCamera setVideoZoomFactor:[DefaultZoomFactor floatValue]];
[backCamera unlockForConfiguration];
}
else
{
NSLog(@"%@", error);
}
[self.session startRunning];
});
}
答案 0 :(得分:0)
如果您的问题是您的应用通过与原生iOS相机应用相比缩放照片,则此设置可能会对您有所帮助。 我有“这个”问题,以下解决方案解决了这个问题。
解决方案: 配置会话
- (void)viewDidLoad
{
[super viewDidLoad];
// Create the AVCaptureSession
AVCaptureSession *session = [[AVCaptureSession alloc] init];
[self setSession:session];
--> self.session.sessionPreset = AVCaptureSessionPresetPhoto; <---
...
}
您必须知道,设置仅适用于照片而不适用于视频。如果您尝试使用视频,您的应用就会崩溃。
您可以根据需要配置会话(照片或视频) 对于视频,您可以使用此值:AVCaptureSessionPresetHigh
BR。