AV Foundationを使用して、ビデオカメラ(iPhone 4s、iOS 6.1.2)からのフレームを処理しています。AV Foundationプログラミングガイドに従って、AVCaptureSession、AVCaptureDeviceInput、AVCaptureVideoDataOutputを設定しています。captureOutput:didOutputSampleBuffer:fromConnection:
すべてが期待どおりに機能し、デリゲートでフレームを受信できます。
また、次のようなプレビューレイヤーセットがあります。
AVCaptureVideoPreviewLayer *videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
[videoPreviewLayer setFrame:self.view.bounds];
videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer insertSublayer:videoPreviewLayer atIndex:0];
つまり、フレーム処理に1秒あたり30フレームは必要なく、とにかく高速に処理することはできません。したがって、このコードを使用してフレーム期間を制限しています。
// videoOutput is AVCaptureVideoDataOutput set earlier
AVCaptureConnection *conn = [videoOutput connectionWithMediaType:AVMediaTypeVideo];
[conn setVideoMinFrameDuration:CMTimeMake(1, 10)];
[conn setVideoMaxFrameDuration:CMTimeMake(1, 2)];
これは正常に機能し、 captureOutputデリゲートが受信するフレームを制限します。
ただし、これによりプレビューレイヤーの1秒あたりのフレーム数も制限され、プレビュービデオの応答が非常に悪くなります。
ドキュメントから、フレーム期間は接続に応じて独立して設定され、プレビューレイヤーには実際に異なるAVCaptureConnectionがあることがわかります。のミックス/最大フレーム期間をチェックする[videoPreviewLayer connection]
と、実際にデフォルト(1/30および1/24)に設定されており、AVCaptureVideoDataOutputの接続で設定されている期間とは異なることがわかります。
それで、フレームキャプチャ出力でのみフレーム期間を制限し、プレビュービデオで1 / 24-1 / 30フレーム期間を表示することは可能ですか?どのように?
ありがとう。