我正在开展一个项目,我们将使用 iPhone 作为相机来捕捉场景。录制时,我们需要录制 @60fps 而不是 30fps( native 支持)。所以我正在开发一个应用程序来执行此操作,因为 iPhone 4S 硬件支持 720p@60fps(如果你越狱你的手机你可以实现这一点)。
有人知道如何在 iOS 上的 Objective-C 中执行此操作吗?今天我看到一个应用程序(slopro)可以在非越狱手机上录制 60fps。非常感谢任何建议或提示。
最佳答案
经过一些修改,这个答案分为两部分:
如何以 60fps 捕获帧
iPhone4s/5.1 上的 AVCaptureSessionPreset1280x720,帧持续时间设置为:
connection.videoMinFrameDuration = CMTimeMake(1, 60);*
connection.videoMaxFrameDuration = CMTimeMake(1, 60);
为您提供稳定、 super 流畅的捕捉。
如何将帧捕获到文件@60fps
捕获帧非常好,但可能您想保留它们。
正如布拉德在评论中指出的那样,将这些帧写入文件是另一回事。
遗憾的是,无论我尝试何种配置,通过 AVAssetWriter
对帧进行编码都会导致捕获率下降到观察到的 ~37fps 并且无论怎样摆弄 alwaysDiscardsLateVideoFrames
都无法改变它.然而,在这种方法中,每一帧都从 AVFoundation 复制到您的应用程序,然后再复制回来,这对于总线来说是毫无意义的并且非常耗时。幸运的是,AVFoundation
有一个类可以消除这种往返:AVCaptureMovieFileOutput
。
如果您让 AVFoundation
为您编写,那么 iPhone4S 可以以 60fps* 的速度捕获帧和音频并将其编码为 .mov 文件,而不会费力(~25% CPU)。
虽然 60fps 视频捕获是一个很棒的功能,但我还是忍不住感到有点失望,因为 AVCaptureMovieFileOutput
排除了很多有趣的东西(例如,使用 GL 着色器的实时效果,录制开始/停止没有丢帧)。
蛋糕/吃它
*59 如果你还在运行 iOS 5.0.1
关于iphone - 在 iPhone 应用程序中捕获 60fps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10344637/