16

シーンをキャプチャするためのカメラとして iPhone を使用するプロジェクトに取り組んでいます。記録するときは、30fps ではなく @60fps で記録する必要があります (ネイティブでサポートされています)。そのため、iPhone 4S ハードウェアが 720p@60fps をサポートしているため、これを行うためのアプリに取り組んでいます (携帯電話をジェイルブレイクすれば、これを実現できます)。

iOSのObjective-Cでこれを行う方法を知っている人はいますか? 今日、ジェイルブレイクされていない電話で60fpsを記録できるアプリ(slopro)を見ました。アドバイスやヒントは大歓迎です。

4

2 に答える 2

15

少しいじくり回した後、この回答は2つの部分に分かれています。

60fpsでフレームをキャプチャする方法

フレーム期間が次のように設定された、i​​Phone4s/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 ファイルにキャプチャしてエンコードできます。

AVCaptureMovieFileOutput60fps のビデオ キャプチャは素晴らしい機能ですが、多くの楽しい機能 (GL シェーダーによるリアルタイム エフェクト、フレーム ロスなしの記録開始/停止など) が除外されているため、少しがっかりすることはありません。

ケーキ/食べる

*iOS 5.0.1 をまだ実行している場合は 59

于 2012-04-30T19:03:08.920 に答える
7

私は前にこれを試したことがない、多分これらは関連している:

于 2012-04-27T04:28:15.137 に答える