我是整个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”符号,但我不知道它的含义。
当我显式打开设备时,还会出现错误“无法初始化未打开的设备”。
如果有人可以帮助我解决这个问题,那将是很大的帮助,谢谢。
最佳答案
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
。您正在将此地址(也称为指针)传递给QTKit方法之一的error:
参数。如果遇到错误,该方法将创建一个NSError对象,并将其存储在该地址(即您的变量中)。这称为“按参考返回”(“参考”是您提供的指针)。当我显式打开设备时,还会出现错误“无法初始化未打开的设备”。
哪个方法返回错误?您是在谈论NSError还是只是控制台消息?如果是后者,请检查您的NSError变量,并查看留下了什么问题方法。
顺便说一句,这就是为什么如果任何QTKit方法返回错误,您都应予以纾困的原因:后续消息之一可能会用新的错误掩盖它,如果您不这样做。