2013-04-18 7 views
5

Ich muss jeden Frame von erfassten Video-Frame verarbeiten, obwohl AVCaptureDevice.formats so viele verschiedene Dimension von Rahmengrößen zur Verfügung gestellt, scheint es AVCaptureSession nur unterstützt diese Rahmengrößen in Voreinstellungen definiert.Wie benutzerdefinierte Videoauflösung verwenden, wenn AVFoundation und AVCaptureVideoDataOutput auf Mac

Ich habe auch versucht, ganz gleich AVCaptureDevice.activeFormat vor AVCaptureInputDevice oder nach einzustellen, welche Einstellung ich gesetzt, wenn ich AVCaptureSessionPresetHigh in AVCaptureSession gesetzt, es mir immer einen Rahmen von 1280x720 geben. Ähnlich, wenn ich AVCaptureSessionPreset 640x480 setze, kann ich nur Rahmengröße von 640x480 erhalten.

Also, wie kann ich eine benutzerdefinierte Video Frame-Größe wie 800x600 einstellen? Wenn Sie Media Foundation unter Windows oder V4L2 unter Linux verwenden, können Sie bei der Aufnahme ganz einfach eine benutzerdefinierte Bildgröße festlegen.

Es scheint nicht möglich, dies unter Mac zu tun.

+1

Hat eine der folgenden Antworten Ihnen geholfen? – Stavash

Antwort

0

Verwenden Sie die videoSettings-Eigenschaft von AVCapturwVideoDataOutput, um das Pixelformat, die Breite und die Höhe in einem Wörterbuch zu beschreiben.

1

Set kCVPixelBufferWidthKey und kCVPixelBufferHeightKey Optionen auf AVCaptureVideoDataOutput Objekt. Minimal Beispiel wie unten (Fehlerprüfung hinzufügen).

_sessionOutput = [[AVCaptureVideoDataOutput alloc] init]; 

NSDictionary *pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithDouble:width], (id)kCVPixelBufferWidthKey, 
           [NSNumber numberWithDouble:height], (id)kCVPixelBufferHeightKey, 
           [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey, 
           nil]; 
[_sessionOutput setVideoSettings:pixelBufferOptions]; 

Hinweis: Diese Breite/Höhe überschreibt die voreingestellte Breite/Höhe der Sitzung (falls unterschiedlich).

+2

Das funktioniert nicht. Wie @Bourne sagte: "Der einzige derzeit unterstützte Schlüssel ist der Schlüssel kCVPixelBufferPixelFormatTypeKey." Wenn Sie Ihren Code ausprobieren, erhalten Sie eine Fehlermeldung, die besagt, dass das Wörterbuch "videoSettings" einen oder mehrere nicht unterstützte (ignorierte) Schlüssel enthält. – eyuelt

+0

@eyuelt Es funktioniert. Bitte sehen Sie sich das Beispiel https://github.com/kiranpradeep/cameraResolution – Kiran

+0

an. Sie haben Recht. Es funktioniert unter OSX. Tut mir leid, ich habe nicht bemerkt, dass diese Frage für OSX war. Ich suchte nach einer Lösung für dieses Problem auf iOS. – eyuelt

1

AFAIK gibt es keine Möglichkeit, dies zu tun. Der gesamte Code, den ich für die Videoaufnahme gesehen habe, verwendet die Voreinstellungen.

Die documentation for AVCaptureVideoDataOutput für die Videoeinstellungen Eigenschaft sagt

Der einzige Schlüssel unterstützt derzeit die kCVPixelBufferPixelFormatTypeKey Schlüssel.

so die anderen Antworten der Weitergabe von Videoeinstellungen wird nicht funktionieren, und es wird nur ignorieren diese Parameter.

+0

Es funktioniert. Kann undokumentiert sein. Bitte sehen Sie sich das Beispiel https://github.com/kiranpradeep/cameraResolution an – Kiran

Verwandte Themen