Захват неподвижного изображения из AVCaptureSession в Swift

У меня есть AVCaptureSession, который отображает живое видео в UIView, и я хочу сохранить кадр видеопотока как UIImage. Я анализировал код, который постоянно вижу в Интернете, но у меня возникли проблемы с первой строкой:

if let stillOutput = self.stillImageOutput {
    // Establish an AVCaptureConnection and capture a still image from it.
}

Это дает мне ошибку «Камера» не имеет члена с именем «stillImageOutput». Код зависит от возможности получить видеосоединение с выхода.

Я могу опубликовать полный блок кода, если это будет полезно. Спасибо!


person Naftali Beder    schedule 23.10.2014    source источник
comment
Не могли бы вы опубликовать полный код?   -  person Laurent Rivard    schedule 12.02.2015


Ответы (1)


Если у вас есть stillImageOutput, вы можете использовать следующие методы для захвата изображения

 stillImageOutput.outputSettings = [AVVideoCodecKey:AVVideoCodecJPEG]
    if captureSession.canAddOutput(stillImageOutput) {
        captureSession.addOutput(stillImageOutput)
    }

    // I had to add timer otherwise quality was messed up in iPad
    var timer = NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: Selector("getImage"), userInfo: nil, repeats: false)

Чем моя функция для получения изображения

func getImage() {

    if let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) {
        stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) {
            (imageDataSampleBuffer, error) -> Void in
            let imageData = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)

//          Use your image or store to Album

//          UIImageWriteToSavedPhotosAlbum(UIImage(data: imageData), nil, nil, nil)
            self.stopSession()

        }
    }

}

И остановить сеанс и удалить слой предварительного просмотра

func stopSession(){


    self.captureSession.stopRunning()
    self.previewLayer?.removeFromSuperlayer()

}
person Saqib Omer    schedule 26.08.2015