在使用 AVCaptureSession 捕获图像之前获取输出图像分辨率

Posted

技术标签:

【中文标题】在使用 AVCaptureSession 捕获图像之前获取输出图像分辨率【英文标题】:Get output image resolution before capturing images with AVCaptureSession 【发布时间】:2014-10-06 04:43:01 【问题描述】:

我正在开发一个 iPhone 应用程序,我必须在其中使用 AVCaptureSession 从后置摄像头捕获图像。应用程序每次启动,都会从服务器接收2个值,第一个值是AVCaptureSession的sessionPreset属性,第二个是一个GCRect,用于裁剪输出图像(这个矩形的坐标对应到输出图像的分辨率)。

现在的问题是,我必须将该剪切矩形“绘制”到相机预览上,这意味着我必须将剪切矩形的坐标映射到相机预览的另一个“正确”坐标(因为 sessionPreset每次应用程序启动时都会有所不同)。我搜索了 Apple 的文档,但找不到获取输出图像分辨率的方法。我需要该输出分辨率才能进行裁剪矩形的映射。

这是我在视图控制器中启动 AVCaptureSession 的代码:

- (void)viewDidLoad

    [super viewDidLoad];

    //Capture Session
    AVCaptureSession *session = [[AVCaptureSession alloc]init];
    session.sessionPreset = _sessionPreset; //this _sessionPreset varies each time my app starts

    //Add device
    AVCaptureDevice *device =
    [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    //Input
    AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

    if (!input)
    
       NSLog(@"No Input");
    

    [session addInput:input];

    //Output
    AVCaptureStillImageOutput *output = [[AVCaptureStillImageOutput alloc] init];
    NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey,nil];
    [output setOutputSettings:outputSettings];

    [session addOutput:output];


    //Preview Layer
    AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];
    UIView *myView = self.view;
    previewLayer.frame = myView.bounds;
    previewLayer.videoGravity = AVLayerVideoGravityResizeAspect;
    [self.view.layer addSublayer:previewLayer];

    //Start capture session
    [session startRunning];
    //Now I want to draw the rectangle after the session starts

提前谢谢各位:)

【问题讨论】:

【参考方案1】:

幸运的是,我在这里找到了我的问题的答案:

ios8 video dimension, CMVideoDimensions returns 0,0

只要确保在 [captureSession startRunning] 之后捕获通知即可;

【讨论】:

以上是关于在使用 AVCaptureSession 捕获图像之前获取输出图像分辨率的主要内容,如果未能解决你的问题,请参考以下文章

从 AVCaptureSession 捕获的 iPhone 图像比例

iOS:如何在 AVCaptureSession 上激活图像稳定功能?

AVCaptureSession 暂停?

如何在 Swift 中使用 AVCaptureSession 捕获图片?

AVCaptureSession 与 UIImagePickerController 的速度

使用 swift 3 在 iOS 中存储捕获的图像