添加QTCaptureSession不返回的输入法



我有以下代码:

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];

这个位于运行时加载的bundle中,是一个方法的一部分,该方法是NSThread的选择器。它在后台线程而不是主线程中运行)。

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

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

解决方案正在调用:

CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);

在苹果的QuickTime邮件列表中有关于这个问题更详细的解释

相关内容

  • 没有找到相关文章