在didFinishRecordingToOutputFileAt

时间:2018-01-06 20:55:22

标签: ios swift avfoundation

我制作了一个符合AVCaptureFileOutputRecordingDelegate的相机对象。录制视频后,我将使用func capture()通过代理转移网址。问题在于,由于某些原因,当调用此函数时,视频似乎实际上没有完成录制,因为urlDelegate?.URL总是调试到nil,尽管outputURL有一个值。这显然是同步问题,但我不明白为什么。  我应该如何解决这个问题,更重要的是为什么在使用didFinishRecordingToOutputFileAt

时视频没有完成
func capture(_ output: AVCaptureFileOutput!, didFinishRecordingToOutputFileAt outputFileURL: URL!, fromConnections connections: [Any]!, error: Error!) {
        if error == nil {
            urlDelegate?.URL = outputURL
        }

    }

即便尝试过,仍然没有:

func capture(_ output: AVCaptureFileOutput!, didFinishRecordingToOutputFileAt outputFileURL: URL!, fromConnections connections: [Any]!, error: Error!) {
        if error == nil {
            DispatchQueue.global(qos: DispatchQoS.userInitiated.qosClass).async {
                let url = self.outputURL
                DispatchQueue.main.async {
                    if let completedURL = url {
                        self.urlDelegate?.URL = completedURL
                    }
                }
            }
        }

    }

1 个答案:

答案 0 :(得分:1)

代码中的主要问题是fileoutput method signature错误。您还可以查看其他AVCaptureFileOutputRecordingDelegate方法。

正确的方法签名是:

func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?)

除此之外,您正在访问错误的对象。它应该是outputFileURL而不是outputURL,并且它不是可选的,因此无需解包。