2011-06-27 13 views
5

Estoy usando un AVCaptureVideoPreviewLayer para permitir al usuario encuadrar un plano desde la cámara del iPhone. Así que tengo una AVCaptureSession con la entrada como AVCaptureDeviceInput, y la salida como AVCaptureStillImageOutput.Controlar la velocidad de cuadro o regulación de un AVCaptureVideoPreviewLayer

También tengo animaciones y controles en la parte superior de la alimentación de video, pero estos son lentos y espasmódicos porque el video detrás se está ejecutando a la máxima velocidad de cuadros y atando la CPU/GPU.

Me gustaría limitar la velocidad de fotogramas de AVCaptureVideoPreviewLayer. Veo que está la propiedad minFrameDuration en AVCaptureVideoDataOutput, pero no puedo encontrar nada similar en AVCaptureVideoPreviewLayer.

Respuesta

4

No creo que el problema esté relacionado con la velocidad de fotogramas. Así que voy a sugerir algunos consejos para mejorar el rendimiento de su aplicación:

1) AVCaptureVideoPreviewLayer es simplemente una subclase de CALayer que muestra la salida de la cámara, por lo que es imposible limitar la velocidad de cuadro de la misma.

2) Compruebe si ha colocado sus animaciones en el lugar correcto, depende de qué tipo de animaciones tenga, si es CALayer entonces la capa de animación debe ser una subcapa de su capa de vista principal (NO AVCaptureVideoPreviewLayer !!!), si se trata de UIView, debe ser una subvista de su vista de lienzo principal.

3) Puede mejorar el rendimiento de la aplicación mediante el establecimiento de la sesión preestablecido:

[captureSession setSessionPreset:AVCaptureSessionPresetLow]; 

Por defecto se establece en alto, es posible establecer que lo que sea necesario, que es sólo una calidad de vídeo y si es alto rendimiento no podría ser ideal.

4) Hice mi propia aplicación de prueba, donde la animación aleatoria superpone la capa de vista previa de video (¡pero es una subvista de mi vista principal!) Y todo se solucionó incluso en mi viejo iPod, puedo darte un código para la inicialización de la sesión de captura:

// Create a capture session 
self.captureSession = [AVCaptureSession new]; 
if([captureSession canSetSessionPreset:AVCaptureSessionPresetHigh]){ 
    [captureSession setSessionPreset:AVCaptureSessionPresetHigh]; 
} 
else{ 
    // HANDLE ERROR 
} 

// Find a suitable capture device 
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

// Create and add a device input 
NSError *error = nil; 
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&error]; 
if([captureSession canAddInput:videoInput]){ 
    [captureSession addInput:videoInput]; 
} 
else{ 
    // HANDLE ERROR 
} 

// Create and add a device still image output 
AVCaptureStillImageOutput *stillImageOutput = [AVCaptureStillImageOutput new]; 
[stillImageOutput addObserver:self forKeyPath:@"capturingStillImage" options:NSKeyValueObservingOptionNew context:AVCaptureStillImageIsCapturingStillImageContext]; 
if([captureSession canAddOutput:stillImageOutput]){ 
    [captureSession addOutput:stillImageOutput]; 
} 
else{ 
    // HANDLE ERROR 
} 

// Setting up the preview layer for the camera 
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; 
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
previewLayer.frame = self.view.bounds; 

// ADDING FINAL VIEW layer TO THE CAMERA CANVAS VIEW sublayer 
[self.view.layer addSublayer:previewLayer]; 

// start the session 
[captureSession startRunning]; 

5) y, por último, en IOS5 puede establecer min y velocidad de fotogramas de vídeo máximo, lo que también puede mejorar el rendimiento de su aplicación, supongo que es lo que has pedido. Compruebe este enlace (Ajuste de velocidad mínima y máxima de fotogramas de vídeo):

http://developer.apple.com/library/mac/#releasenotes/AudioVideo/RN-AVFoundation/_index.html

la esperanza de que mi respuesta fue clara.

mejores deseos,

Artem

+0

Muchas gracias por su respuesta, esto es una cuestión de edad, pero la noticia de las adiciones a iOS 5 son muy útiles. – joerick

Cuestiones relacionadas