2009-03-07 17 views
0

Ich bin neu mit der ganzen QTKit und ich war auf der Suche nach einigen Rückmeldungen auf den folgenden Code, den ich verwenden möchte, um das Bild der Kamera anzuzeigen und Filme aufzunehmen.Cocoa QTKit und Aufnahme von Filmen

- (void)initializeMovie { 

NSLog(@"Hi!"); 

QTCaptureSession* mainSession = [[QTCaptureSession alloc] init]; 

QTCaptureDevice* deviceVideo = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeVideo"]; 

QTCaptureDevice* deviceAudio = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeSound"]; 

NSError* error; 

[deviceVideo open:&error]; 
[deviceAudio open:&error]; 

QTCaptureDeviceInput* video = [QTCaptureDeviceInput deviceInputWithDevice:deviceVideo]; 

QTCaptureDeviceInput* audio = [QTCaptureDeviceInput deviceInputWithDevice:deviceAudio]; 

[mainSession addInput:video error:&error]; 
[mainSession addInput:audio error:&error]; 

QTCaptureMovieFileOutput* output = [[QTCaptureMovieFileOutput alloc] init]; 
[output recordToOutputFileURL:[NSURL URLWithString:@"Users/chasemeadors/Desktop/capture1.mov"]]; 

[mainSession addOutput:output error:&error]; 

[movieView setCaptureSession:mainSession]; 

[mainSession startRunning]; 

} 

Auch ich bin mir nicht sicher über den ganzen Fehlerparameter, der die Methoden für den Aufruf zu halten, sah ich das „& Fehler“ Symbol in einem Beispiel, aber ich weiß nicht, was es bedeutet.

Ich bekomme auch einen Fehler "kann ein Gerät nicht öffnen, das nicht offen ist", wenn ich die Geräte explizit öffne.

Wenn jemand mir helfen könnte, dies zu sortieren, wäre es eine große Hilfe, danke.

Antwort

2

QTCaptureDevice* deviceVideo = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeVideo"];

QTCaptureDevice* deviceAudio = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeSound"];

Übergeben Sie die tatsächlichen Konstanten hier, nicht String-Literale mit ihren Namen. Es gibt keine Garantie, dass QTMediaTypeVideo zu @"QTMediaTypeVideo" definiert ist; es könnte @"Ollie ollie oxen free" sein, und selbst wenn es das ist, was Sie erwarten jetzt, könnte es jederzeit ändern.

[output recordToOutputFileURL:[NSURL URLWithString:@"Users/chasemeadors/Desktop/capture1.mov"]]; 

Gehen Sie nicht davon aus, dass das aktuelle Arbeitsverzeichnis/ist. Verwenden Sie immer absolute Pfade. (Ich weiß, das ist Testcode;. In echten Code, natürlich, würden Sie einen NSSavePanel ausgeführt haben und den Weg von dort bekommen)

Also, I'm not sure about the whole error parameter that the methods keep calling for, I saw the " &error " symbol in an example but I don't know what it means.

Die & bedeutet, dass Sie die Adresse einer Variablen sind unter, die in diesem Fall ist error. Sie übergeben diese Adresse (a.k.a.-Zeiger) an das error: Argument einer der QTKit-Methoden. Wenn die Methode einen Fehler feststellt, erstellt sie ein NSError-Objekt und speichert es unter dieser Adresse, d. H. In Ihrer Variablen. Dies wird "Rückgabe-durch-Referenz" genannt (die "Referenz" ist der von Ihnen angegebene Zeiger).

I'm also getting an error "cannot initialize a device that is not open" when I explicitly open the devices.

Welche Methode gibt den Fehler zurück? Sprechen Sie über einen NSError oder nur eine Konsolenmeldung? Wenn Letzteres, überprüfen Sie Ihre NSError-Variable und sehen Sie, was die Problemmethode zurückgelassen hat.

Dies ist übrigens der Grund, warum Sie aussteigen sollten, wenn eine der QTKit-Methoden einen Fehler zurückgibt: Eine der nachfolgenden Nachrichten kann sie mit einem neuen Fehler überdecken, wenn Sie dies nicht tun.

2

Sie können auch die MyRecorder sample code betrachten. Es ist ein voll funktionsfähiger Videorekorder, der auf der QTKit Capture API basiert. Der Code ist relativ einfach und sollte einfach zu verstehen sein.