Какао QTKit и запись фильмов - PullRequest
0 голосов
/ 08 марта 2009

Я новичок во всем QTKit, и я искал отзывы о следующем коде, который я пытаюсь использовать для отображения изображения с камеры и записи фильмов.

- (void)initializeMovie {

NSLog(@"Hi!");

QTCaptureSession* mainSession = [[QTCaptureSession alloc] init];

QTCaptureDevice* deviceVideo = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeVideo"];

QTCaptureDevice* deviceAudio = [QTCaptureDevice defaultInputDeviceWithMediaType:@"QTMediaTypeSound"];

NSError* error;

[deviceVideo open:&error];
[deviceAudio open:&error];

QTCaptureDeviceInput* video = [QTCaptureDeviceInput deviceInputWithDevice:deviceVideo];

QTCaptureDeviceInput* audio = [QTCaptureDeviceInput deviceInputWithDevice:deviceAudio];

[mainSession addInput:video error:&error];
[mainSession addInput:audio error:&error];

QTCaptureMovieFileOutput* output = [[QTCaptureMovieFileOutput alloc] init];
[output recordToOutputFileURL:[NSURL URLWithString:@"Users/chasemeadors/Desktop/capture1.mov"]];

[mainSession addOutput:output error:&error];

[movieView setCaptureSession:mainSession];

[mainSession startRunning];

}

Кроме того, я не уверен относительно всего параметра ошибки, для которого методы продолжают вызывать, я видел символ «& error» в примере, но я не знаю, что он означает.

Я также получаю сообщение об ошибке «не могу инициализировать устройство, которое не открыто», когда я явно открываю устройства.

Если бы кто-нибудь мог помочь мне разобраться с этим, это было бы очень полезно, спасибо.

Ответы [ 2 ]

2 голосов
/ 08 марта 2009

Также вы можете посмотреть пример кода MyRecorder . Это полнофункциональный видеомагнитофон на основе API QTKit Capture. Код достаточно прост и должен быть легок для понимания.

2 голосов
/ 08 марта 2009

QTCaptureDevice * deviceVideo = [QTCaptureDevice defaultInputDeviceWithMediaType: @ "QTMediaTypeVideo"];

QTCaptureDevice * deviceAudio = [QTCaptureDevice defaultInputDeviceWithMediaType: @ "QTMediaTypeSound"];

Передайте здесь фактические константы, а не строковые литералы, содержащие их имена. Нет гарантии, что QTMediaTypeVideo определено для @"QTMediaTypeVideo"; это может быть @"Ollie ollie oxen free", и даже если это то, что вы ожидаете сейчас , оно может измениться в любое время.

[output recordToOutputFileURL:[NSURL URLWithString:@"Users/chasemeadors/Desktop/capture1.mov"]];

Не думайте, что текущим рабочим каталогом является /. Всегда используйте абсолютные пути. (Я знаю, что это тестовый код; в реальном коде, конечно, вы запустили бы NSSavePanel и получили бы путь оттуда.)

Кроме того, я не уверен относительно всего параметра ошибки, для которого методы продолжают вызывать, я видел символ "&error" в примере, но я не знаю, что он означает.

Символ & означает, что вы берете адрес переменной, который в данном случае равен error. Вы передаете этот адрес (указатель a.k.a.) в аргумент error: одного из методов QTKit. При обнаружении ошибки метод создаст объект NSError и сохранит его по этому адресу, т.е. в вашей переменной. Это называется «возврат по ссылке» (указанная вами «ссылка»).

Я также получаю сообщение об ошибке «не могу инициализировать устройство, которое не открыто», когда я явно открываю устройства.

Какой метод возвращает ошибку? Вы говорите о NSError или просто о консольном сообщении? Если последнее, проверьте переменную NSError и посмотрите, что оставил проблемный метод.

Это, кстати, то, почему вы должны выручить, если какой-либо из методов QTKit вернет ошибку: одно из последующих сообщений может засорить его новой ошибкой, если вы этого не сделаете.

...