【发布时间】:2011-06-12 04:46:08
【问题描述】:
我正在开发一个 iPhone 应用程序,我将很快向现场观众演示。
我真的很想在投影仪上通过 VGA 现场演示应用程序,而不是显示屏幕截图。
我为 iPhone 购买了一个 VGA 适配器,并调整了 Rob Terrell's TVOutManager 以满足我的需要。不幸的是,在我家的电视上测试后的帧速率并不是那么好——即使在 iPhone 4 上也是如此(可能每秒 4-5 帧,它会有所不同)。
我认为这种缓慢的原因是我用来捕获设备屏幕(然后显示在外部显示器上)的主要例程是UIGetScreenImage()。这个不再被允许成为应用程序的一部分的例程实际上非常慢。这是我用来捕获屏幕的代码(仅供参考mirrorView 是UIImageView):
CGImageRef cgScreen = UIGetScreenImage();
self.mirrorView.image = [UIImage imageWithCGImage:cgScreen];
CGImageRelease(cgScreen);
我可以使用更快的方法来捕捉 iPhone 的屏幕并获得更好的帧速率(拍摄 20+ fps)吗?它不需要通过 Apple 的应用程序审查 - 此演示代码不会在发货应用程序中。如果有人知道任何更快的私有 API,我将非常感谢您的帮助!
此外,上面的代码正在使用重复的NSTimer 执行,它每1.0/desiredFrameRate 秒(当前每0.1 秒)触发一次。我想知道是否将这些调用包装在一个块中并使用 GCD 或NSOperationQueue 可能比让NSTimer 调用我当前包含这些调用的updateTVOut obj-c 方法更有效。对此也很感激 - 一些搜索似乎表明 obj-c 消息发送与其他操作相比有些慢。
最后,正如您在上面看到的,UIGetScreenImage() 返回的CGImageRef 被转换为UIImage,然后UIImage 被传递给UIImageView,这可能正在调整图像大小苍蝇。我想知道调整大小是否会进一步减慢速度。关于如何更快地做到这一点的想法?
【问题讨论】:
标签: iphone ios screen-capture iphone-privateapi