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