Получите разрешение выходного изображения перед захватом изображений с помощью AVCaptureSession

Я разрабатываю приложение для iPhone, в котором мне нужно использовать AVCaptureSession для захвата изображения с задней камеры. Каждый раз, когда приложение запускается, оно получает 2 значения от сервера, первое значение - это свойство sessionPreset объекта AVCaptureSession, а второе - 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, CMVideoDimensions возвращает 0,0

Просто убедитесь, что перехватили уведомление после [captureSession startRunning];

Другие вопросы по тегам