使用 AVFoundation 录制电影时,录制会在 34 分钟左右自动停止,错误代码为 -11813:AVErrorMaximumNumberOfSamplesForFileFormatReached
在对QuickTime 文件格式规范进行了一些研究之后,似乎 Atom 标头不包含扩展大小字段。规范告诉我:
如果原子的大小字段设置为 1,则类型字段后跟一个 64 位扩展大小字段,其中包含原子的实际大小,为 64 位无符号整数。这在媒体数据原子的大小超过 2^32 字节时使用。
显然,如果扩展大小字段不存在 - 当大小字段包含原子的实际大小时,我无法写入超过 2^32 个字节 - 如此处所述:
当 size 字段包含原子的实际大小时,扩展的 size 字段不存在。这意味着当通过添加数据修改 QuickTime atom 并且其大小超过 2^32 字节限制时,没有扩展的大小字段可以记录新的 atom 大小。因此,在不将原子内容复制到新原子的情况下,并不总是可以将原子扩大到 2^32 字节以上。
我AVCaptureMovieFileOutput
用来录制我AVCaptureSession
的视频和音频AVCaptureDeviceInput
我的问题:如何手动将大小字段设置为 1?或者使用 AVCaptureMovieFileOutput 是错误的方法 - 我应该使用 AVAssetWriter 方法吗?我正在从实时视频采集器和音频输入录制视频和音频。
这个问题可以通过 Apple 自己的AVRecorder示例项目重现。更改 sessionPresets 并不能解决问题。
我的 QTKit 应用程序没有这个限制。QuickTime Player X 本身也可以录制超过这个 34 分钟的界限。
这是一个已知问题 - 还是我错过了什么?