我正在开发一个 iPhone 应用程序,我将很快向现场观众演示。
我真的很想通过 VGA 将应用程序实时演示到投影仪上,而不是显示屏幕截图。
我为 iPhone 购买了一个 VGA 适配器,并调整了Rob Terrell 的 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 或 anNSOperationQueue
可能比调用当前包含这些调用的NSTimer
我的obj-c 方法更有效。updateTVOut
也将不胜感激 - 一些搜索似乎表明 obj-c 消息发送与其他操作相比有些慢。
最后,正如您在上面看到的CGImageRef
,UIGetScreenImage()
返回的 被转换为 a UIImage
,然后UIImage
被传递给 a UIImageView
,这可能正在动态调整图像的大小。我想知道调整大小是否会进一步减慢速度。如何更快地做到这一点的想法?