QTKit, открытие устройств ввода?

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

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:]- не может инициализировать ввод устройства с устройством, которое не открыто.

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


person cemulate    schedule 09.03.2009    source источник
comment
Вы уже об этом не спрашивали? stackoverflow.com/questions/622567/   -  person Peter Hosey    schedule 10.03.2009
comment
Что ж, я подумал об этом, и, поскольку я не задавал «точно» это, я подумал, что, вероятно, получу больше ответов с новым вопросом, вместо того, чтобы пытаться добавить детали к предыдущему вопросу, тогда как мой предыдущий вопрос просто просил общая обратная связь.   -  person cemulate    schedule 11.03.2009


Ответы (1)


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

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

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];
person nonpolynomial237    schedule 27.04.2009