【问题标题】:Cocoa QTKit and recording moviesCocoa QTKit 和录制电影
【发布时间】:2010-10-11 23:25:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c cocoa xcode macos qtkit


    【解决方案1】:

    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 对象并将其存储在该地址 - 即,在您的变量中。这称为“return-by-reference”(“reference”是您提供的指针)。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-09
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多