我正在开发一个项目,我们将使用iPhone作为捕捉场景的摄像头。录制时我们需要录制@ 60fps而不是30fps(原生支持)。所以我正在开发一款应用程序来实现这一点,因为iPhone 4S硬件支持720p @ 60fps(如果你越狱你的手机你可以实现这一点)。
有人知道如何在iOS上的Objective-C中执行此操作吗?今天我看到一个应用程序(slopro)可以在非越狱手机上录制60fps。任何建议或提示都非常感谢。
答案 0 :(得分:15)
经过一些修补,这个答案分为两部分:
如何以60fps
捕获帧iPhone4s / 5.1上的AVCaptureSessionPreset1280x720,帧持续时间设置为:
connection.videoMinFrameDuration = CMTimeMake(1, 60);*
connection.videoMaxFrameDuration = CMTimeMake(1, 60);
为您提供稳定,超级流畅的捕捉。
如何将帧捕获到文件@ 60fps
捕获帧非常好,但可能你想保留它们
正如Brad在评论中指出的那样,将这些帧写入文件是另一回事。
遗憾的是,无论我尝试什么配置,通过AVAssetWriter
对帧进行编码都会导致捕获率下降到观察到的~37fps,而alwaysDiscardsLateVideoFrames
的任何数量都不会改变它。然而,在这种方法中,每一帧都从AVFoundation复制到你的应用程序,然后再回来,这对于公共汽车来说是毫无意义的。幸运的是,AVFoundation
有一个类可以删除此往返:AVCaptureMovieFileOutput
。
如果你让AVFoundation
为你写作,那么iPhone4S可以以60fps *的速度捕获和编码帧+音频到.mov文件,而不会出汗(~25%CPU)。
虽然60fps的视频捕捉功能很棒,但我感到有些失望,因为AVCaptureMovieFileOutput
排除了许多有趣的事情(例如GL着色器的实时效果,录制开始/停止而没有帧丢失) 。
蛋糕/吃它
* 59如果您仍在运行iOS 5.0.1
答案 1 :(得分:7)
我之前没有尝试过,也许这些是相关的:
videoMinFrameDuration
和videoMaxFrameDuration
videoMaxFrameDuration
)