См. Образец OpenGLCaptureToMovie . Я бы добавил, что вместо таймера следует использовать API-интерфейсы обновления уведомлений Quartz Display Services .
Обратите внимание, что пример OpenGL не создает объектов NSImage. В этом нет никакого смысла, поскольку вы не можете поместить это в фильм. Ну, я думаю, вы могли бы назначить NSImage в указанное время кадра, но я не знаю, насколько хорошо это будет работать со сжатием.
Говоря о сжатии, используйте кодек Animation с максимальным качеством для вашей записи. Это обеспечивает достаточно приличное сжатие, чтобы не перегружать диск, и, конечно, не перегружает процессоры. Затем вы можете предложить варианты преобразования, такие как H.264, H.264 для iPhone и H.264 для iPod. Вы также должны позволить пользователю сохранить оригинальный файл; некоторые сайты, такие как Vimeo, примут его и позволят посетителям загрузить его.