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)
- Swift AVCaptureSessionclosures打开button错误:当前不支持多个audio/videoAVCaptureInputs
- 如何loggingvideo并保持音乐在后台播放?
- AVCaptureSession VS UIImagePickerController相机预览
- AVCaptureSession – 停止运行 – 需要很长时间
- 如何在iOS 9中通过幻灯片和拆分视图使用AVCaptureSession?
- 具有多个输出的AVCaptureSession?
- 如何使用metadataOutputRectOfInterestForRect方法和rectOfInterest属性来扫描特定区域? (二维码)
- 如何在使用RTMPStreamPublisher发布video的同时在iPhone上存储video?
- 从CVImageBufferRef获取内存的所有权