私は iPhone アプリに取り組んでおり、すぐにライブの聴衆に向けてデモを行う予定です。
スクリーンショットを表示するのではなく、VGA 経由でプロジェクターにアプリをライブでデモしたいと思っています。
私は iPhone 用の VGA アダプタを購入し、Rob Terrell の TVOutManagerを私のニーズに適合させました。残念ながら、自宅のテレビでテストした後のフレーム レートは、iPhone 4 でもそれほど良くありません (おそらく 1 秒あたり 4 ~ 5 フレームで、変動します)。
この遅さの理由は、デバイスの画面をキャプチャするために使用しているメインルーチン (外部ディスプレイに表示されている) がUIGetScreenImage()
. アプリを出荷することはもはや許可されていないこのルーチンは、実際には非常に遅いです。画面をキャプチャするために使用しているコードは次のとおりです(FYImirrorView
は ですUIImageView
):
CGImageRef cgScreen = UIGetScreenImage();
self.mirrorView.image = [UIImage imageWithCGImage:cgScreen];
CGImageRelease(cgScreen);
iPhone の画面をキャプチャし、より良いフレーム レート (20 fps 以上の撮影) を実現するために使用できるより高速な方法はありますか? Apple のアプリ レビューに合格する必要はありません。このデモ コードは出荷用アプリには含まれません。より高速なプライベート API を知っている人がいれば、助けていただければ幸いです。
また、上記のコードは、毎秒(現在は 0.1 秒ごと)NSTimer
に発生する繰り返しを使用して実行されています。1.0/desiredFrameRate
代わりに、これらの呼び出しをブロックでラップし、GCD またはを使用する方が、現在それらの呼び出しを含む obj-c メソッドを呼び出すNSOperationQueue
よりも効率的ではないかと考えています。それについてもいくつかの入力をいただければ幸いです-一部の検索では、obj-cメッセージの送信が他の操作に比べてやや遅いことが示されているようです。NSTimer
updateTVOut
最後に、上記でわかるように、CGImageRef
返さUIGetScreenImage()
れた が に変換されてUIImage
からUIImage
に渡されますUIImageView
。これはおそらくその場で画像のサイズを変更しています。サイズを変更すると、さらに速度が低下するのではないかと考えています。これをより速く行う方法のアイデアはありますか?