VoiceOver 성능에 영향을 미치는 것으로 밝혀 졌으므로 응용 프로그램에 대한 비디오 캡처 프레임 속도를 조절하려고합니다.AVCapture 프레임 워크에서 비디오 캡처 프레임 속도를 조절하고 싶습니다.
현재 비디오 카메라에서 프레임을 캡처 한 다음 가능하면 빨리 OpenGL 루틴을 사용하여 프레임을 처리합니다. 캡처 프로세스에서 특정 프레임 속도를 설정하고 싶습니다.
videoMinFrameDuration 또는 minFrameDuration을 사용하여이 작업을 수행 할 수있을 것으로 기대했지만 성능에 아무런 영향을 미치지 않는 것으로 보입니다. 어떤 아이디어?
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];
for (AVCaptureDevice *device in devices)
{
if ([device position] == AVCaptureDevicePositionBack)
{
backFacingCamera = device;
// SET SOME OTHER PROPERTIES
}
}
// Create the capture session
captureSession = [[AVCaptureSession alloc] init];
// Add the video input
NSError *error = nil;
videoInput = [[[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error] autorelease];
// Add the video frame output
videoOutput = [[AVCaptureVideoDataOutput alloc] init];
[videoOutput setAlwaysDiscardsLateVideoFrames:YES];
[videoOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey:(id)kCVPixelBufferPixelFormatTypeKey]];
[videoOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
// Start capturing
if([backFacingCamera supportsAVCaptureSessionPreset:AVCaptureSessionPreset1920x1080])
{
[captureSession setSessionPreset:AVCaptureSessionPreset1920x1080];
captureDeviceWidth = 1920;
captureDeviceHeight = 1080;
#if defined(VA_DEBUG)
NSLog(@"Video AVCaptureSessionPreset1920x1080");
#endif
}
else do some fall back stuff
// If you wish to cap the frame rate to a known value, such as 15 fps, set
// minFrameDuration.
AVCaptureConnection *conn = [videoOutput connectionWithMediaType:AVMediaTypeVideo];
if (conn.supportsVideoMinFrameDuration)
conn.videoMinFrameDuration = CMTimeMake(1,2);
else
videoOutput.minFrameDuration = CMTimeMake(1,2);
if ([captureSession canAddInput:videoInput])
[captureSession addInput:videoInput];
if ([captureSession canAddOutput:videoOutput])
[captureSession addOutput:videoOutput];
if (![captureSession isRunning])
[captureSession startRunning];
아이디어가 있으십니까? 내가 놓친 게 있니? 이것이 스로틀 링하는 가장 좋은 방법입니까?
AVCaptureConnection *conn = [videoOutput connectionWithMediaType:AVMediaTypeVideo];
if (conn.supportsVideoMinFrameDuration)
conn.videoMinFrameDuration = CMTimeMake(1,2);
else
videoOutput.minFrameDuration = CMTimeMake(1,2);
원래 메시지에는 분명하지 않았습니다. minFrameDuration 메서드는 아무 것도하지 않는 것처럼 보이지만 프레임 속도를 줄이지는 않습니다. ios 5.0 SDK를 사용하여 ios 4.3 대상에 대해 구축하고 있습니다. –