2009-03-09 12 views
0

Je suis en train d'ajouter deux entrées à un QTCaptureSession dans les domaines suivants:QTKit, ouverture des périphériques d'entrée?

mainSession = [[QTCaptureSession alloc] init]; 

BOOL success; 
NSError* error; 

QTCaptureDevice *videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeVideo"]; 
success = [videoDevice open:&error]; 

QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeSound"]; 
success = [audioDevice open:&error]; 

//video = [[QTCaptureDeviceInput alloc] initWithDevice:videoDevice]; 
//success = [mainSession addInput:video error:&error]; 

//audio = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice]; 
//success = [mainSession addInput:audio error:&error]; 

output = [[QTCaptureMovieFileOutput alloc] init]; 
success = [mainSession addOutput:output error:&error]; 

[output setDelegate:self]; 

[movieView setCaptureSession:mainSession]; 

[mainWindow makeKeyAndOrderFront:NSApp]; 

[mainSession startRunning]; 

J'ai déterminé que la partie est commenté les sources de l'erreur:

[QTCaptureDeviceInput initWithDevice:]- cannot intialize device input with device that is not open.

J'AVONS sondé ma variable "succès" après les méthodes ouvertes et il est oui. Alors pourquoi la méthode pense-t-elle que l'appareil n'est pas ouvert?

+0

ne vous demande pas déjà? http://stackoverflow.com/questions/622567/cocoa-qtkit-and-recording-movies –

+0

Eh bien, j'avais pensé à cela, et comme je ne posais pas 'exactement' ça, je pensais que j'aurais probablement plus de réponses avec une nouvelle question plutôt que d'essayer d'ajouter des détails à une question précédente, alors que ma question précédente demandait simplement une rétroaction générale. – cemulate

Répondre

1

Si vous n'avez pas encore trouvé de réponse, je pense que votre problème se trouve dans les lignes au-dessus des deux que vous avez indiquées. J'ai vérifié la documentation d'Apple, et j'ai trouvé que QTMediaTypeSound et QTMediaTypeVideo sont des constantes, pas des chaînes que vous devriez passer manuellement. Une instruction NSLog() rapide révèle, par exemple, que la constante QTMediaTypeVideo est réellement égale à "vide".

En bref, votre code devrait être:

mainSession = [[QTCaptureSession alloc] init]; 

BOOL success; 
NSError* error; 

QTCaptureDevice *videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo]; 
success = [videoDevice open:&error]; 

QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeSound]; 
success = [audioDevice open:&error]; 

video = [[QTCaptureDeviceInput alloc] initWithDevice:videoDevice]; 
success = [mainSession addInput:video error:&error]; 

audio = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice]; 
success = [mainSession addInput:audio error:&error]; 

output = [[QTCaptureMovieFileOutput alloc] init]; 
success = [mainSession addOutput:output error:&error]; 

[output setDelegate:self]; 

[movieView setCaptureSession:mainSession]; 

[mainWindow makeKeyAndOrderFront:NSApp]; 

[mainSession startRunning]; 
Questions connexes