Objective c QTCaptureSession的addInput方法未返回

Objective c QTCaptureSession的addInput方法未返回,objective-c,cocoa,qtkit,Objective C,Cocoa,Qtkit,我有以下代码: BOOL success; QTCaptureSession *session = [[QTCaptureSession alloc] init]; QTCaptureDevice *device = [QTCaptureDevice defaultInputDeviceWithMediaType: QTMediaTypeVideo]; success = [device open: &e]; if ( !success ) { NSLog(@"error

我有以下代码:

BOOL success;

QTCaptureSession *session = [[QTCaptureSession alloc] init];
QTCaptureDevice  *device  = [QTCaptureDevice defaultInputDeviceWithMediaType: QTMediaTypeVideo];
success = [device open: &e];
if ( !success )
{
    NSLog(@"error opening input device: %@", e);
    return;
}

QTCaptureDeviceInput *input = [QTCaptureDeviceInput deviceInputWithDevice: device];
success = [session addInput: input error: &e];
if ( !success )
{
    NSLog(@"error adding input device to session: %@", e);
    return;
}

QTCaptureDecompressedVideoOutput *output = [[QTCaptureDecompressedVideoOutput alloc] init];
[output setDelegate: self];
success = [session addOutput: output error: &e];
if ( !success )
{
    NSLog(@"error adding output device to session: %@", e);
    return;
}

[session startRunning];
它位于运行时加载的捆绑包中,并且是作为NSThread选择器的方法的一部分(也称为。它在后台线程而不是主线程中运行)


我的问题是,对#addInput:error:的调用永远不会返回。这里我遗漏了什么?

问题是,应用程序的主线程没有在Cocoa应用程序中使用通常由NSApplicationMain()提供的运行循环。相反,我在自己的while循环中处理事件

解决方案是:

CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);

在苹果公司的QuickTime邮件列表中,您可以获得关于该问题的更详细解释。

您能详细说明如何解决该问题吗?我目前也遇到了同样的问题,不知道如何用CFRunLoop解决这个问题……IIRC我对CFRunLoopRunInMode(kCFRunLoopDefaultMode,0,YES)进行了“Spreaded”调用;在主线程的while循环中。