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