Zoom personalizado de la camera hacia adentro y hacia afuera mientras graba video usando AVFoundation

En el último iOS 7.1, la aplicación de camera nativa puede acercar / alejar mientras se graba el video, y el video guardado en las Fotos muestra el efecto de acercar / alejar.

Ahora, estoy usando AVFoundation para implementar video personalizado. Puedo acercar / alejar mientras grabo video usando videoMaxScaleAndCropFactor para modificar AVCaptureVideoPreviewLayer. Sin embargo, el video guardado no muestra el efecto de acercar / alejar.

¿Hay alguna sugerencia para implementar esta function?

También estoy buscando eso. El siguiente enlace ofrece una solución para ampliar el video.

http://www.iphonelife.com/blog/87/imaging-video-guru-reporting-lossless-video-zooming-ios7

La lógica para el zoom de video es:

int selectedAVCaptureDeviceFormatIdx = 15; [self.videoDevice lockForConfiguration:nil]; AVCaptureDeviceFormat* currdf = [self.videoDevice.formats objectAtIndex:selectedAVCaptureDeviceFormatIdx]; self.videoDevice.activeFormat = currdf; if (selectedAVCaptureDeviceFormatIdx==12 || selectedAVCaptureDeviceFormatIdx==13) self.videoDevice.activeVideoMaxFrameDuration = CMTimeMake(1,60); NSLog(@"%f", self.videoDevice.activeFormat.videoMaxZoomFactor); NSLog(@"videoZoomFactorUpscaleThreshold: %f", self.videoDevice.activeFormat.videoZoomFactorUpscaleThreshold); // If you want to zoom to the threshold of possible zooming before binning occurs self.videoDevice.videoZoomFactor = videoDevice.activeFormat.videoZoomFactorUpscaleThreshold; // If you want to set your own zoom factor //self.videoDevice.videoZoomFactor = 3.0f;// here zoom given in CGFloat like 1, 2, 3, 4, 5. [self.videoDevice unlockForConfiguration:nil]; 

Prueba esto:

 float zoomLevel = 2.0f; float zoomRate = 2.0f; if ([device respondsToSelector:@selector(rampToVideoZoomFactor:)] && device.activeFormat.videoMaxZoomFactor >= zoomLevel) { if ([[device lockForConfiguration:nil]) { [device rampToVideoZoomFactor:zoomLevel withRate:zoomRate]; [device unlockForConfiguration]; } } 

Eso le da un zoom suave. Para un zoom instantáneo (por ejemplo, responder a pequeños cambios causados ​​por un UISlider disparando muchos datos) use setVideoZoomFactor: lugar de rampToVideoZoomFactor:withRate: