我有以下代码:
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:永远不会返回。我在这里缺少什么?
答案 0 :(得分:0)
问题是,应用程序的主线程没有使用通常由Cocoa应用程序中的NSApplicationMain()提供的运行循环。相反,我在我自己的循环中处理事件。
解决方案是:
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);
Apple的QuickTime邮件列表上的This thread可以更详细地解释问题。