我是整个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方法返回错误,您都应予以纾困的原因:后续消息之一可能会用新的错误掩盖它,如果您不这样做。

10-08 16:00