我是整个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”符号,但我不知道这意味着什么。
当我明确打开设备时,我也收到错误“无法初始化未打开的设备”。
如果有人能帮助我解决这个问题,那将是一个很大的帮助,谢谢。
答案 0 :(得分: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
。您将此地址(a.k.a.指针)传递给QTKit方法之一的error:
参数。如果遇到错误,该方法将创建一个NSError对象并将其存储在该地址 - 即变量中。这称为“引用返回”(“引用”是您提供的指针)。
当我明确打开设备时,我也收到错误“无法初始化未打开的设备”。
哪种方法返回错误?您是在谈论NSError还是仅仅是控制台消息?如果是后者,请检查您的NSError变量,看看问题方法留下了什么。
顺便说一句,这就是为什么如果任何一个QTKit方法返回错误你应该挽救的原因:如果不这样做,后续消息之一可能会用新错误来破坏它。
答案 1 :(得分:2)
另外,您可能需要查看MyRecorder sample code。它是基于QTKit Capture API的全功能视频录像机。代码相当简单,应该易于理解。