2016-01-06 10 views
12

Ich verwende AVCaptureSession zum Aufnehmen und Aufnehmen eines Videos.Kann AVCaptureSession benutzerdefinierte Auflösung verwenden

Ich muss das Video in einem Verhältnis von 4: 3 und mit einer guten Auflösung aufzeichnen.

Gibt es eine Möglichkeit, eine benutzerdefinierte Auflösung bei der Aufnahme mit AVCaptureSession anzugeben?

Ich habe versucht, die nativen Voreinstellungen, aber das Problem ist, dass ich im 4: 3-Verhältnis erfassen muss, und fast alle Voreinstellungen sind 16: 9. und diejenigen, die 4: 3 sind, haben eine sehr niedrige Auflösung.

Ich kann keine andere Möglichkeit finden, die Voreinstellung auf eine benutzerdefinierte zu ändern, was ist, wenn ich ein 4: 3 Video mit besserer Auflösung aufnehmen muss? Irgendwelche Ideen?

+0

können Sie weitere Informationen bereitstellen? Welche voreingestellten Optionen hast du versucht? –

+0

hast du versucht AVCaptureSessionPreset640x480? –

+0

@ Mr.T Ich brauche eine bessere Auflösung – Eyal

Antwort

8

AVCaptureSession Voreinstellungen decken nur eine kleine Teilmenge der Funktionen einer Gerätekamera ab (diejenigen, für die die meisten Apps einen schnellen und einfachen Zugriff benötigen). Für feinere Steuerungsmöglichkeiten - z. B. zum Auswählen einer Aufnahmeauflösung, die nicht von einer Sitzungsvoreinstellung bereitgestellt wird - müssen Sie stattdessen Aufnahmeformate verwenden.

Betrachten Sie die Eigenschaft formats des Erfassungsgeräts, ein Array von AVCaptureDeviceFormat Objekten. Zählen Sie durch dieses Array auf, bis Sie eines finden, dessen Dimensionen Sie wünschen. Um die Dimensionen zu bekommen, schauen Sie sich das Format zugrunde liegenden CMFormatDescription:

let fdesc = format.formatDescription 
let dims = CMVideoFormatDescriptionGetDimensions(fdesc) 
NSLog("%d x %d", dims.width, dims.height) 

Sobald Sie das Format gefunden haben, die Sie wollen, sperren Sie das Gerät für die Konfiguration und legen Sie seine activeFormat:

if try device.lockForConfiguration() { 
    device.activeFormat = myChosenFormat 
    // set up other things like activeVideoMinFrameDuration if you want 
    device.unlockForConfiguration() 
} 

können Sie herausfinden, Weitere Informationen zum Konfigurieren einer Aufnahmesitzung über AVCaptureDeviceFormat in Apples programming guide und the WWDC2013 session, die Geräteformate in iOS 7.0 eingeführt haben. (Das meiste, was Sie zu diesem Thema finden, zielt auf Zeitlupenvideos, hochauflösende Standbilder während des Videos und andere Dinge ab, die Sie mit Sitzungsvorgaben nicht erreichen können, aber das sind nicht die einzigen Dinge, die Sie tun können machen Sie mit Aufnahmeformate.)

+0

Hallo Danke für Ihre Antwort, beim Drucken der Dims es scheint, dass es keine neuen Dimensionen, aber eine Menge Duplikate gibt . und ich habe keine Möglichkeit gefunden, ein neues Format zu erstellen (nicht sicher, ob es möglich ist) – Eyal

1

Nehmen Sie einfach im angegebenen Seitenverhältnis auf und verwenden Sie eine AVMutableComposition, um das Ausgangsvideo auf das erforderliche Seitenverhältnis zu beschneiden: Wenn Sie die Vorschauebene auf 4: 3 maskieren, wird dies nahtlos angezeigt Benutzer.