2009-03-09 5 views
0

Я пытаюсь добавить два входа в QTCaptureSession в следующем:QTKit, устройства ввода ввода?

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

Я определил, что закомментировать часть источники ошибки:

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

Я исследовал мою переменную «успех» после открытых методов, и это да. Итак, почему метод считает, что устройство не открыто?

+0

Вы не спросить это уже? http://stackoverflow.com/questions/622567/cocoa-qtkit-and-recording-movies –

+0

Ну, я подумал об этом, и, поскольку я не спросил «точно», я думал, что, вероятно, получаю больше ответов с новый вопрос, а не пытаться добавить детали к предыдущему вопросу, в то время как мой предыдущий вопрос просто требовал общей обратной связи. – cemulate

ответ

1

Если вы еще не нашли ответ, я думаю, что ваша проблема действительно находится в строках выше указанных вами двух. Я проверил документацию Apple и обнаружил, что QTMediaTypeSound и QTMediaTypeVideo являются константами, а не строками, которые вы должны вручную передать. Быстрый оператор NSLog() показывает, например, что константа QTMediaTypeVideo на самом деле равна «смотреть».

Короче говоря, ваш код должен быть:

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