Я не могу комментировать производительность, но вы хотите:
- создать
AVAssetWriter
(который может принимать входящие сэмплы и записывать их в H.264; нетдругие форматы файлов, похоже, поддерживаются в текущем выпуске iOS) - присоединяет
AVAssetWriterInput
к устройству записи ресурса для предоставления видеокадров (поскольку средство записи ресурса принимает один или несколько входных данных, каждый для обеспечения различных аспектовasset); - присоедините
AVAssetWriterInputPixelBufferAdaptor
ко входу модуля записи ресурсов, чтобы можно было выдвигать пиксельные буферы на входе.Вы захотите сообщить входным данным средства записи ресурсов, что они ожидают мультимедийные данные в режиме реального времени.Это говорит о том, что вы всегда должны быть готовы к вводу.Вы можете указать синхронизацию фреймов, как и когда вы предоставляете фреймы, так что это не накладывает требования к производительности на остальную часть вашего кода.
Оттуда, вам просто нужно вставить CVImageBuffers в ваш пиксельбуферный адаптер.В OS X есть удобный тип буфера Core Video OpenGL, но в iOS он отсутствует.Вместо этого вам нужно glReadPixels
рядом с CVPixelBufferCreate
и т. Д., Заблокировав пиксельный буфер и записав его непосредственно по его базовому адресу.Надеемся, что вы получите что-то, что вы можете передать непосредственно в OpenGL, без необходимости перетасовывать байты между ними.
Предположим, что у iPhone есть специальный кодер H.264, основным узким местом производительности, вероятно, будут glReadPixels, из-за чеговсе, что находится в буфере кадров, должно быть передано и переформатировано для ЦП.Если вы все настроите, а результаты покажутся медленными, я бы сначала изучил их.