AVCaptureSession 音频不适用于长视频



我正在使用AVCaptureSession录制带音频的视频。短视频似乎一切正常,但出于某种原因,如果我录制的视频超过12秒,音频就不起作用。

编辑因为这个答案仍在获得支持):这个答案可以缓解问题,但问题的可能根本原因在@jfeldman的答案中得到了解决。


我找到了一个完全不同的问题的答案。

问题是AVCaptureMovieFileOutput中的movieFragmentInterval属性。

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

QuickTime影片由媒体示例和示例表组成识别它们在文件中的位置。没有示例的电影文件表不可读。

在已处理的文件中,示例表通常显示在文件的开头。它也可能出现在文件末尾的在这种情况下,标头包含指向终止录制新的电影文件时,无法由于文件的大小尚不清楚,请编写示例表。相反,必须在录制完成时写入表格。如果不采取其他操作,这意味着如果录制成功完成(例如,在崩溃的情况下),文件数据不可用(因为没有示例表)。通过定期将"电影片段"插入到电影文件中,示例表可以逐步建立起来。这意味着如果未写入文件完全而言,电影文件仍然可用(直到最后一个片段被写入)。

它还说:

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

所以出于某种原因,每当写一个片段时,我的录音就会变得一团糟。我刚刚添加了行movieFileOutput.movieFragmentInterval = kCMTimeInvalid;(其中movieFileOutput是我添加到AVCaptureSession的AVCaptureMovieFileOutput)来禁用片段写入,音频现在可以工作了。

我们也遇到了这个问题。基本上禁用电影片段写作是可行的,但它并不能真正解释这个问题。很可能您正在使用不支持此功能的文件扩展名(如mp4)录制输出文件。如果您传递一个扩展名为mov的输出文件,那么使用电影片段编写应该没有问题,并且输出文件将具有音频。

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

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

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

kCMTimeInvalid现在已被弃用。这就是现在的分配方式:

videoFileOutput?.movieFragmentInterval = CMTime.invalid

相关内容

最新更新