AVCaptureMovieFileOutput输出文件不存在

时间:2018-01-17 06:24:56

标签: ios swift avfoundation

我正在尝试在我的应用中实现自定义视频录制和图像捕获。我已经设置了AVCaptureSession和所有必要的输入/输出来捕获音频,视频和静止图像。但是,完成录制视频后输出文件不存在。由于输出网址上没有文件,因此我无法将视频保存到用户照片库。

为什么没有创建输出文件?我self.videoOutputAVCaptureMovieFileOutput)上缺少一个设置?

startRecording实施:

func startRecording() throws {
    if !self.recording {
        let documentDirectory = try FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
        let url = documentDirectory.appendingPathComponent(UUID().uuidString)

        self.videoOutput.startRecording(to: url, recordingDelegate: self)
    }
}

AVCaptureFileOutputRecordingDelegate实施。

extension MainViewController: AVCaptureFileOutputRecordingDelegate {
func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection]) {
    self.recording = true
    //FileManager.default.fileExists(fileURL.absoluteString) == false
}

func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
    self.recording = false
    //FileManager.default.fileExists(outputFileURL.absoluteString) == false

    PHPhotoLibrary.shared().performChanges({
        PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: outputFileURL)
    }) { saved, error in
        if saved {
            do {
                try FileManager.default.removeItem(at: outputFileURL)
            } catch _ as NSError {
                //error
            }
        }
    }
}
}

1 个答案:

答案 0 :(得分:0)

结束时有两个问题:

首先 - 我正在检查文件是否存在使用错误的代码。检查文件是否存在的正确方法是:

FileManager.default.fileExists(atPath: outputFileURL.path)

第二 - 除了UUID作为有效文件名之外,Photos框架没有。一旦我在文件名中添加了“.mov”扩展名,框架就能够将视频保存到Photos应用程序中。下面的工作代码:

let url = documentDirectory.appendingPathComponent(UUID().uuidString + ".mov")