0

我是整个 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”符号,但我不知道它是什么意思。

当我明确打开设备时,我也收到错误“无法初始化未打开的设备”。

如果有人能帮我解决这个问题,那将是一个很大的帮助,谢谢。

4

2 回答 2

2

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. 您正在将此地址(也称为指针)传递给error:QTKit 方法之一的参数。如果遇到错误,该方法将创建一个 NSError 对象并将其存储在该地址 - 即,在您的变量中。这称为“按引用返回”(“引用”是您提供的指针)。

当我明确打开设备时,我也收到错误“无法初始化未打开的设备”。

哪个方法返回错误?您是在谈论 NSError 还是只是控制台消息?如果是后者,请检查您的 NSError 变量并查看问题方法留下了什么。

顺便说一句,这就是为什么如果任何 QTKit 方法返回错误时您应该退出的原因:如果您不这样做,后续消息之一可能会用新的错误来破坏它。

于 2009-03-07T22:40:48.070 回答
2

此外,您可能想查看MyRecorder 示例代码。它是一个基于 QTKit Capture API 的全功能录像机。代码相当简单,应该很容易理解。

于 2009-03-08T14:18:55.397 回答