录制时从后置摄像头切换到前置摄像头

时间:2015-08-30 18:21:56

标签: ios iphone swift camera

所以我有一个完全有效的自定义相机。您可以录制视频并获取文件等。您可以选择要使用的摄像机;正面或背面。但是,当我按下记录,我可以在前置摄像头和后置摄像头之间切换时,我希望它仍然记录到文件,直到我点击停止录制。希望这是有道理的。

我的切换相机的代码:

@IBAction func changeCamera(sender: AnyObject) {

    println("change camera")

    self.recordButton.enabled = false

    dispatch_async(self.sessionQueue!, {

        var currentVideoDevice:AVCaptureDevice = self.videoDeviceInput!.device
        var currentPosition: AVCaptureDevicePosition = currentVideoDevice.position
        var preferredPosition: AVCaptureDevicePosition = AVCaptureDevicePosition.Unspecified

        switch currentPosition{
        case AVCaptureDevicePosition.Front:
            preferredPosition = AVCaptureDevicePosition.Back
        case AVCaptureDevicePosition.Back:
            preferredPosition = AVCaptureDevicePosition.Front
        case AVCaptureDevicePosition.Unspecified:
            preferredPosition = AVCaptureDevicePosition.Back

        }



        var device:AVCaptureDevice = ViewController.deviceWithMediaType(AVMediaTypeVideo, preferringPosition: preferredPosition)

        var videoDeviceInput: AVCaptureDeviceInput = AVCaptureDeviceInput(device: device, error: nil)

        self.session!.beginConfiguration()

        self.session!.removeInput(self.videoDeviceInput)

        if self.session!.canAddInput(videoDeviceInput){

            NSNotificationCenter.defaultCenter().removeObserver(self, name:AVCaptureDeviceSubjectAreaDidChangeNotification, object:currentVideoDevice)

            ViewController.setFlashMode(AVCaptureFlashMode.Auto, device: device)

            NSNotificationCenter.defaultCenter().addObserver(self, selector: "subjectAreaDidChange:", name: AVCaptureDeviceSubjectAreaDidChangeNotification, object: device)

            self.session!.addInput(videoDeviceInput)
            self.videoDeviceInput = videoDeviceInput

        }else{
            self.session!.addInput(self.videoDeviceInput)
        }

        self.session!.commitConfiguration()



        dispatch_async(dispatch_get_main_queue(), {
            self.recordButton.enabled = true
            self.stopRecording.enabled = true
        })

    })

}

0 个答案:

没有答案