QTKit, открытие устройств ввода? - PullRequest
0 голосов
/ 10 марта 2009

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

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

1 Ответ

1 голос
/ 27 апреля 2009

Если вы еще не нашли ответ, я думаю, что ваша проблема на самом деле в строках выше двух, которые вы указали. Я проверил документацию 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];
...