我目前正在从事一个涉及从网络摄像头打开和接收数据的项目。在 OS X 上,我们使用 QTKit 和 QTCaptureSession 来访问网络摄像头。我们正在开发的模块被主进程的某个线程作为插件加载,这会导致以下问题:
QTCaptureSession 的 addInput 方法似乎在等待在“主循环”上处理某些事件。由于主线程永远不会触发主循环(它不是本机 Cocoa 应用程序),因此调用插件的线程将永远挂起。
在这篇文章中描述了一个类似的问题。一个建议的解决方案是在主线程中调用CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES);
我们测试过它并且它可以工作,但是会导致将不必要的(和依赖于插件的)代码添加到主应用程序中。
我的问题是:有没有办法在插件内部“托管”主事件循环 QTCaptureSession 对话?例如:创建一些能够触发主循环等的人工线程。
请注意,我们需要让它在 OS X 10.6 上工作。