AVCaptureSessionaudio不适用于长video

我正在使用AVCaptureSession录制audiovideo。 一切似乎都适合短video,但由于某种原因,如果我录制的video长度大于12秒,则audio不起作用。

我发现解决scheme是一个完全不同的问题的答案 。

问题是AVCaptureMovieFileOutput中的movieFragmentInterval属性。

这个属性的文档解释了这些片段是什么:

QuickTime电影由媒体样本和标识文件中位置的样本表组成。 没有示例表的电影文件是不可读的。

在处理的文件中,样本表通常出现在文件的开头。 它也可能出现在文件的末尾,在这种情况下,头部包含一个指向示例表的指针。 在录制新的电影文件时,由于文件的大小尚不清楚,因此无法写入示例表。 录制完成后,必须写入表格。 如果不采取其他措施,则意味着如果logging没有成功完成(例如发生崩溃),则文件数据不可用(因为没有样本表)。 通过周期性地将“电影片断”插入到电影文件中,可以递增地构build示例表格。 这意味着,如果文件没有完全写入,电影文件仍然可用(直到最后一个片段被写入的位置)。

它还说:

默认值是10秒。 设置为kCMTimeInvalid禁用电影片段写入(通常不推荐)。

所以,出于某种原因,我的录音每当一个片段被写入就越来越混乱。 我只是添加了一行movieFileOutput.movieFragmentInterval = kCMTimeInvalid; (其中movieFileOutput是我已经添加到AVCaptureSession的AVCaptureMovieFileOutput)禁用片段写入,audio现在工作。

我们也经历过这个问题。 基本上禁用电影片段写作将工作,但实际上并没有解释这个问题。 很可能您正在使用不支持此function的文件扩展名(如mp4录制到输出文件。 如果传递扩展名为mov的输出文件,则使用电影片段写入应该没有问题,并且输出文件将具有audio。

更新videoFileOutput.movieFragmentInterval = kCMTimeInvalid为我解决了这个问题。

但是,我调用startRecordingToOutputFileURL后,不小心设置了movieFragmentInterval 。 一个小时后,我意识到自己的错误。 对于像我这样的新手来说, 请注意这个明显的顺序

 videoFileOutput.movieFragmentInterval = kCMTimeInvalid videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)