iOS逐帧动画,脚本

时间:2011-05-11 07:02:03

标签: iphone ios animation movie

2 个答案:

答案 0 :(得分:1)

写得好的问题。对于您的视频导出需求,请查看AVFoundation(从iOS 4开始提供)。如果我要实现这个,我会尝试#1或#4。我认为#1可能是最快的尝试,但这可能是因为我对cocos2d没有任何经验。我想你可以暂停和清理CoreAnimation:查看它采用的CAMediaTiming协议。

答案 1 :(得分:0)

Ran,你有很多选择。您不会找到“完整的解决方案”,但可以利用现有的库来跳过大量的实现和性能问题。你当然可以尝试在OpenGL中构建这一整体,但我的建议是你采用另一种方法。我建议你根据你的json设置在设备上逐帧渲染整个“视频”。这基本上归结为设置你的场景元素,然后确定每个元素的位置[0,1,2],其中每个数字表示某个帧速率的帧(15,20或24 FPS绰绰有余) 。首先,请查看我的library for non-trivial iOS animations,在其中您将找到一个名为AVOfflineComposition的类,它执行“comp项目并保存到磁盘上的文件”步骤。显然,这个类并不能满足您的所有需求,但它是创建N个元素组合并将结果写入视频文件的基本逻辑的良好起点。创建comp的关键是,所有读取设置并将对象放在comp中特定位置的代码都可以在离线模式下运行,最后得到的结果是视频文件。将此与维护内存中所有这些元素所涉及的所有细节进行比较,然后根据一切运行的速度更快或更慢地前进。

下一步将创建1个音频文件,该文件是所有复合帧的“电影”的长度,并使其包含特定时间的任何声音。这基本上意味着在运行时混合音频并将结果保存到输出文件,以便使用AVAudioPlayer轻松播放结果。你可以看一下我为这类事情写的一些非常简单的PCM mixer code。但是,您可能需要考虑更完整的音频引擎,如theamazingaudioengine

有了音频文件和电影文件后,可以使用AVAnimatorMedia类一起播放这些文件并保持同步。请查看此AVSync示例,了解源代码,该示例显示了播放视频和显示电影的紧密同步示例。

您的上一个要求可以使用AVAssetWriterConvertFromMaxvid类实现,它实现的逻辑将读取.mvid电影文件,并使用iPhone或iPad上的h.264编码器硬件将其写为h.264编码视频。使用此代码,您不需要编写基于ffmpeg的服务器模块。此外,这无论如何都行不通,因为将所有未压缩的视频上传到您的服务器需要很长时间。在将视频上传或通过应用程序发送电子邮件之前,您需要将视频压缩为h.264。