AVCaptureSession音频不适用于长视频

eyu*_*elt 14 ios avcapturesession

我正在使用AVCaptureSession录制带有音频的视频.对于短视频,一切似乎都能正常工作,但出于某种原因,如果我录制的视频长度超过12秒,则音频不起作用.

eyu*_*elt 27

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

问题是movieFragmentIntervalAVCaptureMovieFileOutput中的属性.

此属性的文档说明了这些片段是什么:

QuickTime影片由媒体样本和标识其在文件中的位置的样本表组成.没有样本表的电影文件是不可读的.

在已处理的文件中,示例表通常显示在文件的开头.它也可能出现在文件的末尾,在这种情况下,标题包含指向结尾的样本表的指针.当正在记录新的电影文件时,由于尚不知道文件的大小,因此无法编写样本表.相反,必须在录制完成时写入表格.如果不采取其他操作,这意味着如果录制未成功完成(例如,在发生崩溃的情况下),则文件数据不可用(因为没有样本表).通过定期将"电影片段"插入电影文件中,可以逐步建立样本表.这意味着如果文件没有完全写入,则电影文件仍然可用(直到最后一个片段被写入的位置).

它还说:

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

因此,出于某种原因,无论何时写入片段,我的录音都会变得混乱.我刚刚添加了一行movieFileOutput.movieFragmentInterval = kCMTimeInvalid;(movieFileOutput我在AVCaptureSession中添加了AVCaptureMovieFileOutput)以禁用片段写入,现在音频正常工作.


jfe*_*man 7

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


小智 5

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

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

videoFileOutput.movieFragmentInterval = kCMTimeInvalid
videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)
Run Code Online (Sandbox Code Playgroud)