私のアプリでは、ビデオを録画しています。記録されたビデオの fps を 15 fps に制限したいと考えています。それよりも速く、すべてのフレームの処理に問題があるからです。このアプリは iOS 5.0 以降を対象としているので、それよりも古いバージョンの iOS については心配する必要はありません。
最大 fps を設定するには、AVCaptureConnection の setVideoMinFrameDuration を使用できることを知っています。また、実際に機能させるには、VideoMaxFrameDuration も設定する必要があることも知っています。ただし、私の iPad では、AVCaptureConnection の isVideoMinFrameDurationSupported は常に false を返すようです。そのため、videoMinFrameDuration を設定することはなく、AVCAptureVideoDataOutput の minFrameDuration の設定にフォールバックする必要があります (これは非推奨の呼び出しであり、警告などが発生します。 videoMinFrameDuration を設定できない理由を誰か説明できますか?
コード:
AVCaptureVideoDataOutput *videoDataOut = [[AVCaptureVideoDataOutput alloc] init];
NSDictionary *settings = [[NSDictionary alloc]
initWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_420YpCbCr8BiPlanarFullRange],
(id)kCVPixelBufferPixelFormatTypeKey, nil];
videoDataOut.videoSettings = settings;
captureQueue = dispatch_queue_create("videoCaptureQueue", NULL);
[videoDataOut setSampleBufferDelegate:self queue:captureQueue];
videoDataOut.alwaysDiscardsLateVideoFrames = YES;
AVCaptureConnection *conn = [videoDataOut connectionWithMediaType:AVMediaTypeVideo];
// This if block is failing for some reason even though I'm running iOS 5.0+
if ([conn isVideoMinFrameDurationSupported] && [conn isVideoMaxFrameDurationSupported]){
[conn setVideoMinFrameDuration:CMTimeMake(1, pParams->fps)];
[conn setVideoMaxFrameDuration:CMTimeMake(1, pParams->fps)];
}
else {
videoDataOut.minFrameDuration = CMTimeMake(1, pParams->fps);
}
[captureSession addOutput:videoDataOut];
dispatch_release(captureQueue);