2013-10-03 11 views

Odpowiedz

7

Według nagłówka pliku (AVCaptureSession.h)

Ta właściwość jest nieaktualna iOS, w którym wartości minimalne i maksymalne częstotliwości odświeżania regulacji są stosowane wyłącznie w AVCaptureDevice pomocą activeVideoMinFrameDuration i activeVideoMaxFrameDuration Właściwości .

+0

activeVideoMinFrameDuration ISN” t pracuje dla mnie, próbowałem zmienić go dla aktywnego urządzenia przed lub po rozpoczęciu wychwytywania, wszelkie sugestie? – avishic

7

w iOS7 stosując następującą sekwencję mogę to działa z szybkością klatek określić (ja też miał kilka problemów z wykorzystaniem activeVideoMinFrameDuration, ale to wydaje się być rozwiązanie robocza):

AVCaptureDevice* camera = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
if([camera isTorchModeSupported:AVCaptureTorchModeOn]) { 
    [camera lockForConfiguration:nil]; 
    //configure frame rate 
    [camera setActiveVideoMaxFrameDuration:CMTimeMake(1, samplingFrequency)]; 
    [camera setActiveVideoMinFrameDuration:CMTimeMake(1, samplingFrequency)]; 
    [camera unlockForConfiguration]; 
} 

AVCaptureInput* cameraInput = [[AVCaptureDeviceInput alloc] initWithDevice:camera error:nil]; 
AVCaptureVideoDataOutput* videoOutput = [[AVCaptureVideoDataOutput alloc] init]; 
dispatch_queue_t captureQueue=dispatch_queue_create("catpureQueue", DISPATCH_QUEUE_SERIAL); 

//setup delegate 
[videoOutput setSampleBufferDelegate:self queue:captureQueue]; 

videoOutput.videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey, 
          nil]; 
[catpureSession setSessionPreset:AVCaptureSessionPresetMedium]; 

if([catpureSession canAddInput:cameraInput]) 
    [catpureSession addInput:cameraInput]; 
if([catpureSession canAddOutput:videoOutput]) 
    [catpureSession addOutput:videoOutput]; 

[catpureSession startRunning]; 

gdzie catpureSession jest obiektem klasy AVCaptureSession i samplingFrequency jest mój frame rate (set do 30)

+1

Na iOS dokumentacja stwierdza, że ​​właściwości 'activeVideoMinFrameDuration' i' activeMaxFrameDuration' przywracają wartości domyślne, gdy zmieniają się właściwości activeAcaptureDevice, sessionPreset zmienia się lub jeśli dane wejściowe urządzenia są dodawane do sesji. Więc na iOS powinieneś zadzwonić ustawić właściwości 'activeVideoMaxFrameDuration' i' activeVideoMinDuration' tuż przed rozpoczęciem sesji przechwytywania. – tumtumtum