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