使用AVCaptureSessionPresetMedium
时// Create the session
AVCaptureSession * newSession = [[AVCaptureSession alloc] init];
// Configure our capturesession
newSession.sessionPreset = AVCaptureSessionPresetMedium;
有没有办法动态告诉这将解决宽度x高度的问题?显然我可以等到像
这样的代表- (void)captureOutput:(AVCaptureOutput *)captureOutput
didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
在那里调用并确定它,但我宁愿提前做,以便我可以出于性能原因预先计算一些值。
答案 0 :(得分:4)
我很高兴在这方面被证明是错误的,但如果您不想对数字进行硬编码,以下步骤似乎是正确的方法:
-(CGSize)cameraSizeForCameraInput:(AVCaptureDeviceInput*)input
{
NSArray *ports = [input ports];
AVCaptureInputPort *usePort = nil;
for ( AVCaptureInputPort *port in ports )
{
if ( usePort == nil || [port.mediaType isEqualToString:AVMediaTypeVideo] )
{
usePort = port;
}
}
if ( usePort == nil ) return CGSizeZero;
CMFormatDescriptionRef format = [usePort formatDescription];
CMVideoDimensions dim = CMVideoFormatDescriptionGetDimensions(format);
CGSize cameraSize = CGSizeMake(dim.width, dim.height);
return cameraSize;
}
必须在startRunning
调用后调用此方法,否则结果为0,0。我不知道将来会发生什么,所以这就是我遍历ports
数组的原因。