2017-01-31 12 views
0

Я записываю видео через пользовательскую камеру успешно, но еще одно. когда я хочу снова записывать видео, ничего не происходит. Как я это исправить. Я загружаю cameraConfigration() метод в viewWillAppear() и для начала записи вызов recordVideo() метод и для остановки вызова Stoprecording() способ. Вот мой код.Swift 3: видео с рекордом через AVFoundation

func stopRecording() { 
 
     sessionOutput.stopRecording() 
 
     captureSession.stopRunning() 
 
     previewLayer.removeFromSuperlayer() 
 
     
 
    } 
 
    func recordVideo(){ 
 
     // custom camera 
 
     let paths = NSTemporaryDirectory() 
 
     let outputFile = paths.appending("t\(Timestamp).MOV") 
 
     let outputURL = NSURL(fileURLWithPath:outputFile) 
 
     
 
     sessionOutput.startRecording(toOutputFileURL: outputURL as URL!, recordingDelegate: self) 
 
    } 
 
func cameraConfigration(){ 
 
     let deviceDiscoverySession = AVCaptureDeviceDiscoverySession(deviceTypes: [AVCaptureDeviceType.builtInDuoCamera, AVCaptureDeviceType.builtInTelephotoCamera,AVCaptureDeviceType.builtInWideAngleCamera], mediaType: AVMediaTypeVideo, position: AVCaptureDevicePosition.unspecified) 
 
     for device in (deviceDiscoverySession?.devices)! { 
 
      if(device.position == AVCaptureDevicePosition.back){ 
 
       do{ 
 
        let input = try AVCaptureDeviceInput(device: device) 
 
        if(captureSession.canAddInput(input)){ 
 
         captureSession.addInput(input); 
 
         
 
         if(captureSession.canAddOutput(sessionOutput)){ 
 
          captureSession.addOutput(sessionOutput); 
 
          previewLayer = AVCaptureVideoPreviewLayer(session: captureSession); 
 
          previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
 
          previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.portrait; 
 
          cameraPreview.layer.addSublayer(previewLayer); 
 
          
 
         } 
 
         captureSession.startRunning() 
 
        } 
 
       } 
 
       catch{ 
 
        print("exception!"); 
 
       } 
 
      } 
 
     } 
 
    } 
 
    func startCameraFromViewController(viewController: UIViewController, withDelegate delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate) -> Bool { 
 
     if UIImagePickerController.isSourceTypeAvailable(.camera) == false { 
 
      return false 
 
     } 
 
     let cameraController = UIImagePickerController() 
 
     cameraController.sourceType = .camera 
 
     cameraController.mediaTypes = [kUTTypeMovie as NSString as String] 
 
     cameraController.allowsEditing = false 
 
     cameraController.delegate = delegate 
 
     
 
     present(cameraController, animated: true, completion: nil) 
 
     return true 
 
    }

override func viewDidAppear(_ animated: Bool) { 
 
     cameraConfigration() 
 
    }

``

+0

Если на ваш вопрос ответили, можете ли вы принять ответ? –

ответ

3

Проблема заключается в stopRecording() функции, в этой функции вы можете остановить запись и удалить previewLayer формируют его SuperView previewLayer.removeFromSuperlayer() и снова, когда y ou попробуйте запустить запись previewLayer отсутствует, контроллер не может найти previewLayer, так что ничего не происходит.

попробуйте прокомментировать строку previewLayer.removeFromSuperlayer() или добавить вас previewLayer в startRecording() функция.

previewLayer = AVCaptureVideoPreviewLayer(session: captureSession); 
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
previewLayer.connection.videoOrientation = AVCaptureVideoOrientation.portrait; 
cameraPreview.layer.addSublayer(previewLayer); 

перед началом записи. sessionOutput.startRecording(toOutputFileURL: outputURL as URL!, recordingDelegate: self) перед этим line.

+0

спасибо, что это работает нормально. –

+0

Ваше приветствие :) –