Я работаю над приложением для iPhone, которое скоро собираюсь продемонстрировать живой аудитории.
Я действительно хотел бы продемонстрировать приложение в прямом эфире через VGA на проекторе, а не покажите скриншоты.
Я купил адаптер VGA для iPhone и адаптировал TVOutManager Роба Террелла под свои нужды. К сожалению, частота кадров после тестирования на моем домашнем телевизоре просто не так хороша - даже на iPhone 4 (возможно, 4-5 кадров в секунду, она может варьироваться).
Я считаю, что причина такой медлительности в том, что Основная процедура, которую я использую для захвата экрана устройства (который затем отображается на внешнем дисплее), - это UIGetScreenImage ()
. Эта процедура, которая больше не может быть частью приложений для доставки, на самом деле довольно медленная. Вот код I ' m, используя для захвата экрана (FYI mirrorView
- это UIImageView
):
CGImageRef cgScreen = UIGetScreenImage();
self.mirrorView.image = [UIImage imageWithCGImage:cgScreen];
CGImageRelease(cgScreen);
Есть ли более быстрый метод, который я могу использовать для захвата экрана iPhone и достижения лучшей частоты кадров (съемка для 20+ кадров в секунду)? Не нужно проходить проверку приложения Apple - этого демонстрационного кода не будет в приложении для доставки. Если кто-нибудь знает какие-либо более быстрые частные API, я бы очень признателен за помощь!
Кроме того, приведенный выше код выполняется с использованием повторяющегося NSTimer
, который запускается каждые 1.0 / desireFrameRate
секунд (в настоящее время каждые 0,1 секунды). Я' Мне интересно, может ли вместо этого оборачивание этих вызовов в блок и использование GCD или NSOperationQueue
быть более эффективным, чем использование NSTimer
моего метода updateTVOut
obj-c, который в настоящее время содержит эти вызовы. Был бы признателен за некоторые данные по этому поводу - некоторые поисковые запросы, похоже, указывают на то, что отправка сообщения obj-c несколько медленнее по сравнению с другими операциями.
Наконец, как вы можете видеть выше, CGImageRef
, что Возвращаемое значение UIGetScreenImage ()
превращается в UIImage
, а затем этот UIImage
передается в UIImageView
, который, вероятно, изменяет размер изображения на летать. Мне интересно, может ли изменение размера замедлить работу еще больше. Идеи, как сделать это быстрее?