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循环中。