2014-03-31 12 views
6

In der neuesten iOS 7.1 kann die native Kamera-App während der Videoaufnahme ein- und auszoomen, und das in den Fotos gespeicherte Video zeigt tatsächlich den Zoom-In/Out-Effekt.Benutzerdefinierte Kamera zoomen bei der Videoaufnahme mit AVFoundation

Jetzt verwende ich AVFoundation, um benutzerdefinierte Video zu implementieren. Ich kann während der Videoaufnahme vergrößern/verkleinern, indem Sie videoMaxScaleAndCropFactor verwenden, um AVCaptureVideoPreviewLayer zu ändern. Das gespeicherte Video zeigt jedoch den Zoom-In/Out-Effekt nicht an.

Gibt es einen Hinweis, diese Funktion zu implementieren ????

+0

sorry für i in Kommentar schreibe, aber wenn Sie einen Hinweis bekommen, als hier schreiben muss .. Dank up vote für que .. :) –

Antwort

2

Try this:

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]; 
    } 
} 

, die einen reibungslosen Zoom bietet. Für einen sofortigen Zoom (z. B. Antworten auf kleine Änderungen, die durch einen UISlider ausgelöst werden, der viele Daten abfeuert) verwenden Sie setVideoZoomFactor: anstelle von rampToVideoZoomFactor:withRate:.

+0

Ich wünschte, ich könnte Ihre Antwort ein Nein von Zeiten, funktioniert absolut in Ordnung. Danke, Sie haben gerade meinen Tag gerettet. – Rana

3

Ich bin auch auf der Suche nach. Der unten stehende Link bietet eine Lösung zum Zoomen von Videos.

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

Die Logik für Video zoomen ist:

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];