AVFoundation でムービーを録画すると、約 34 分でエラー コード -11813: AVErrorMaximumNumberOfSamplesForFileFormatReached で録画が自動的に停止します。
QuickTime ファイル形式の仕様について調査した結果、Atom ヘッダーには拡張サイズ フィールドが含まれていないようです。仕様は私に教えてくれます:
アトムのサイズ フィールドが 1 に設定されている場合、タイプ フィールドの後に 64 ビットの拡張サイズ フィールドが続きます。これには、アトムの実際のサイズが 64 ビットの符号なし整数として含まれます。これは、メディア データ アトムのサイズが 2^32 バイトを超える場合に使用されます。
どうやら拡張サイズ フィールドが存在しない場合 (サイズ フィールドに 2^32 バイトを超えて書き込むことができないアトムの実際のサイズが含まれている場合)、次のドキュメントに記載されています。
サイズ フィールドにアトムの実際のサイズが含まれている場合、拡張サイズ フィールドは存在しません。これは、データを追加することによって QuickTime アトムが変更され、そのサイズが 2^32 バイトの制限を超える場合、新しいアトム サイズを記録する拡張サイズ フィールドがないことを意味します。したがって、アトムの内容を新しいアトムにコピーせずに、2^32 バイトを超えてアトムを拡大することが常に可能であるとは限りません。
私はビデオとオーディオを持っているものAVCaptureMovieFileOutput
から録音するために使用していますAVCaptureSession
AVCaptureDeviceInput
私の質問: サイズ フィールドを手動で 1 に設定するにはどうすればよいですか? または、AVCaptureMovieFileOutput を間違ったアプローチで使用していますか? AVAssetWriter アプローチを使用する必要がありますか? ライブ ビデオ グラバーとオーディオ入力からビデオとオーディオを録音しています。
この問題は、Apple 自身の AVRecorderによるサンプル プロジェクトで再現可能です。sessionPresets を変更しても問題は解決しません。
私の QTKit アプリケーションでは、この制限はありませんでした。QuickTime Player X 自体も、この 34 分の境界を超えて記録できます。
これは既知の問題ですか、それとも何か見逃していますか?