2017-01-31 1 views
0

저는 맞춤 카메라를 통해 비디오를 성공적으로 녹화하지만 한 가지 더 있습니다. 다시 비디오를 녹화하고 싶을 때 아무 일도 일어나지 않습니다. 내가 어떻게 고쳐? viewWillAppear()cameraConfigration() 메서드를로드하고 시작 녹음에 recordVideo() 메서드를 호출하고 중지 호출 Stoprecording() 메서드에 대해 호출합니다. 여기 내 코드가있다.스위프트 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을 제거 자사의 수퍼를 형성 previewLayer.removeFromSuperlayer() 및 다시 y 녹음을 시작하려고하면 previewLayer 컨트롤러가 previewLayer을 찾지 못해 아무 일도 일어나지 않습니다.

previewLayer.removeFromSuperlayer()에 댓글을 달거나 previewLayerstartRecording() 함수에 추가해보세요.

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

녹음을 시작하기 전에. 이 줄 앞에 sessionOutput.startRecording(toOutputFileURL: outputURL as URL!, recordingDelegate: self)

+0

감사합니다. –

+0

당신을 환영합니다 :) –