Не можете установить максимальную продолжительность записи видео? - PullRequest
0 голосов
/ 23 сентября 2018

Я создал пользовательскую камеру, в которой я хочу установить максимальное время записи 30 секунд.Вот где код написан для установки максимального значения.

@objc func videoAction(sender: UIButton){

    if(imageSetAction()){
        videoImage.image = UIImage(named: "video")
        flashButton.isHidden = true
        videoLabel.textColor = ConstantColors.selectedTextColor
        currentSelected = sender.tag
        if(videoButton.isEnabled){
            if(photoOutput != nil){
                captureSession.removeOutput(photoOutput!)
            }

            self.movieFileOutput = AVCaptureMovieFileOutput()
            self.movieFileOutput?.maxRecordedDuration = CMTime(seconds: 30, preferredTimescale: 600)
            if captureSession.canAddOutput(movieFileOutput!) {
                captureSession.addOutput(movieFileOutput!)
            }
            captureSession.commitConfiguration()
            captureSession.sessionPreset = AVCaptureSession.Preset.high
        }
        let longPressGesture = UILongPressGestureRecognizer.init(target: self, action: #selector(handleLongPress))
        self.semiCircleView.addGestureRecognizer(longPressGesture);
        videoButton.isEnabled = false
    }
}

После этого у меня есть возможность для пользователя редактировать видео, поэтому я вызываю редактор видео по умолчанию в методе делегата.

func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
    if error == nil {
        //UISaveVideoAtPathToSavedPhotosAlbum(outputFileURL.path, nil, nil, nil)
        if UIVideoEditorController.canEditVideo(atPath: outputFileURL.path){
            let videoEditorController = UIVideoEditorController()
            videoEditorController.delegate = self
            videoEditorController.videoPath = outputFileURL.path
            videoEditorController.modalPresentationStyle = .popover
            videoEditorController.popoverPresentationController?.sourceView = self.view
            present(videoEditorController, animated: true, completion: nil)
        }
    }
    print("completed")
}

func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection]) {
    movieFileOutput?.maxRecordedDuration = CMTimeMake(30, 1)

    /* After 30 seconds, let's stop the recording process */
    DispatchQueue.main.asyncAfter(deadline: .now() + 30.0, execute: {
        debugPrint("longpress ended")
        self.movieFileOutput?.stopRecording()
        self.removeProgressBar()
    })
}

Не знаю почему, но видео записывается только в течение 10 секунд.Любая помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Из документации Apple о методе maxRecordedDuration.

Это свойство определяет жесткое ограничение продолжительности записанных файлов.Запись останавливается, когда достигается предел, и метод делегата fileOutput (_: didFinishRecordingTo: from: error :) вызывается с соответствующей ошибкой.Значение этого свойства по умолчанию недопустимо, что указывает на отсутствие ограничений.

Возможно, вам не следует прекращать запись самостоятельно, если оно остановится в fileOutput (_: didFinishRecordingTo: from: error :) метод,

...