少しいじくり回した後、この回答は2つの部分に分かれています。
60fpsでフレームをキャプチャする方法
フレーム期間が次のように設定された、iPhone4s/5.1 の AVCaptureSessionPreset1280x720:
connection.videoMinFrameDuration = CMTimeMake(1, 60);*
connection.videoMaxFrameDuration = CMTimeMake(1, 60);
安定した超スムーズなキャプチャを実現します。
フレームをファイル @60fps に
キャプチャする方法 フレームのキャプチャはすべて非常にうまくいきますが、おそらくそれらを保持したいでしょう。
ブラッドがコメントで指摘したように、これらのフレームをファイルに書き込むことは別の話です。悲しいことに、私が試した構成に関係なく、 を介してフレームをエンコードするとAVAssetWriter
、キャプチャレートが観察された〜37fpsに低下し、いくらいじってalwaysDiscardsLateVideoFrames
もそれを変えることができませんでした. ただし、このアプローチでは、すべての単一フレームが AVFoundation からアプリにコピーされ、その後再びコピーされます。これはまったく無意味であり、バスを非常に消耗させます。幸いなことに、AVFoundation
このラウンド トリップを削除するクラスがあります: AVCaptureMovieFileOutput
.
書き込みを任せれAVFoundation
ば、iPhone4S は汗をかくことなく (~25% CPU) 60fps* でフレームとオーディオを .mov ファイルにキャプチャしてエンコードできます。
AVCaptureMovieFileOutput
60fps のビデオ キャプチャは素晴らしい機能ですが、多くの楽しい機能 (GL シェーダーによるリアルタイム エフェクト、フレーム ロスなしの記録開始/停止など) が除外されているため、少しがっかりすることはありません。
ケーキ/食べる
*iOS 5.0.1 をまだ実行している場合は 59