2014-11-05 107 views

回答

23

我发现解决方案为an answer to a completely different question

问题是AVCaptureMovieFileOutput中的movieFragmentInterval属性。

此属性的文档解释什么这些片段有:

QuickTime电影是由媒体样本的和试样台 标识所述文件中其位置。没有示例 表的电影文件不可读。

在处理的文件中,示例表通常出现在文件的起始处 处。它也可能出现在文件的末尾,在 这种情况下,头部包含一个指向 末端的样本表的指针。当正在记录新的电影文件时,由于文件的大小尚未知道,因此不可能 写入示例表。 而是,记录完成时必须写入表格。如果 没有采取其他操作,这意味着如果记录不成功(例如,在发生崩溃时) 数据不可用(因为没有样本表)。通过定期向电影文件插入“电影片段” ,可以递增地构建示例表格 。这意味着如果文件没有完全写入 ,电影文件仍然可用(直到写入最后一个片段的位置)。

它还说:

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

因此,出于某种原因,我的录音在编写片段时会越来越混乱。我刚刚添加了行movieFileOutput.movieFragmentInterval = kCMTimeInvalid;(其中movieFileOutput是我添加到AVCaptureSession的AVCaptureMovieFileOutput)来禁用片段写入,并且音频现在可以工作。

2

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

但是,我在拨打startRecordingToOutputFileURL后意外设置了movieFragmentInterval。一个小时后,我意识到自己的错误。对于像我这样的新手,注意这个明显的序列

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

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