我正在开发一个iPhone应用程序,不久将向现场观众进行演示。

我真的很想通过VGA将应用程序实时演示到投影仪上,而不是显示屏幕截图。

我购买了适用于iPhone的VGA适配器,并根据自己的需要修改了Rob Terrell's TVOutManager。不幸的是,在我家里的电视上进行测试后的帧率并不是很好-即使在iPhone 4上(每秒4-5帧,它也有所不同)。

我相信这种缓慢的原因是,我用来捕获设备屏幕(然后在外部显示器上显示)的主要例程是UIGetScreenImage()。实际上,该例程(不再允许作为运输应用程序的一部分)实际上是很慢的。这是我用来捕获屏幕的代码(FYI mirrorViewUIImageView):

CGImageRef cgScreen = UIGetScreenImage();
self.mirrorView.image = [UIImage imageWithCGImage:cgScreen];
CGImageRelease(cgScreen);

是否可以使用更快的方法捕获iPhone屏幕并获得更好的帧频(拍摄20 fps以上)?它不需要通过Apple的应用程序审查-该演示代码将不在运输应用程序中。如果有人知道任何更快的私有(private)API,我将非常感谢您的帮助!

另外,上述代码是使用重复的NSTimer执行的,该命令每1.0/desiredFrameRate秒(当前每0.1秒)触发一次。我想知道是否将这些调用包装在一个块中并使用GCD或NSOperationQueue可能比让NSTimer调用当前包含这些调用的updateTVOut obj-c方法更有效。也希望对此有一些输入-某些搜索似乎表明obj-c消息发送与其他操作相比有些慢。

最后,如您在上面看到的,CGImageRef返回的UIGetScreenImage()被转换为UIImage,然后将该UIImage传递给UIImageView,这可能会即时调整图像的大小。我想知道调整大小是否会进一步放慢速度。如何更快地执行此操作的想法?

最佳答案

您是否看过Apple推荐的UIGetScreenImage替代品?在“Notice regarding UIGetScreenImage()”线程中:

关于iPhone演示帮助: anyone know of a faster screen capture alternative to UIGetScreenImage()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4743051/

10-10 23:07