在AVCaptureMovieFileOutput实例上不能多次调用startRecordingToOutputFileURL

ndb*_*ent 5 avfoundation ios avcapturesession avcapturemoviefileoutput swift

我目前正在iOS 8,iPhone 6上进行测试。我正在从Swift调用这些API。

我试图弄清楚为什么我不能startRecordingToOutputFileURL在的单个实例上多次调用AVCaptureMovieFileOutput

  • stopRecording要先打电话,startRecordingToOutputFileURL然后再打电话。
  • 我在致电之前删除了临时视频文件startRecordingToOutputFileURL

第一次,我打电话startRecordingToOutputFileURL时,didStartRecordingToOutputFileAtURL委托回调被触发。当我打电话时stopRecordingdidFinishRecordingToOutputFileAtURL回调被触发。

此后,我删除了临时文件。

然后,当我startRecordingToOutputFileURL下次调用时,不会触发委托回调。当我stopRecording第二次调用时,“完成”回调也不会触发。

用于startRecordingToOutputFileURL苹果文档说以下内容:

在iOS中,不支持此框架精确的文件切换。您必须再次调用stopRecording才能再次调用此方法,以避免出现任何错误。

但是我打电话 stopRecording再次之前先进行调用,但它不起作用。

我当前的解决方法是删除AVCaptureMovieFileOutput连接,初始化一个新实例AVCaptureMovieFileOutput,然后建立新的连接。这很糟糕,因为它需要很长时间并且会冻结视频预览。

如果您知道为什么会发生这种情况,并且有解决办法,请告诉我。

更新:我只是注意到,如果我将其切换AVCaptureSession sessionPresetAVCaptureSessionPresetPhoto然后再回到AVCaptureSessionPresetHigh,则可以再次开始捕获视频。

更新2:这是我可以解决此问题的另一种方法:

    captureSession.stopRunning()
    captureSession.startRunning()
Run Code Online (Sandbox Code Playgroud)

更新3:事实证明,这似乎与捕获音量按钮的某些代码有关-JPSVolumeButtonHandler。当我注释掉开始的代码时,不会发生这种情况JPSVolumeButtonHandler